Perl を 15 分間知っていましたか? 今のところ参照を忘れてください。
基本的に、サブルーチンに渡されるものはすべて配列です。実際、それは という配列に格納されてい@_
ます。
# /usr/bin/env perl
use strict; #ALWAYS USE!
use warnings; #ALWAYS USE!
my @array = qw(member1 member2 member3 member4);
foo(@array, 'scalar', 'scalar', 'scalar');
sub foo {
print "My input is " . join (":", @_) . "\n";
これは印刷されます:
my input is member1:member2:member3:member4:scalar:scalar:scalar
配列からのエントリとスカラーからのエントリを区別する方法はありません。サブルーチンに関する限り、それらはすべて array のメンバーです@_
。
ちなみに、Perl には というコマンドが付属していperldoc
ます。誰かが を参照するように言った場合、コマンド ラインに入力してドキュメントを表示perlref
できます。コマンドで見つかったのと同じ情報が含まれてperldoc perlref
いるサイトに移動することもできます。http://perldoc.perl.org
perldoc
さて、参考文献について....
Perl 配列のデータ要素またはハッシュの値には、単一の値のみを含めることができます。それは文字列かもしれないし、実数かもしれないし、整数かもしれないし、別の Perl データ構造への参照かもしれない。そこにすべての楽しみとお金があります。
たとえば、foo
上記の同じサブルーチンで次の情報を取得できます。
foo(\@array, 'scalar', 'scalar', 'scalar'); #Note the backslash!
この場合、@array
intoの値を渡していませんfoo
。代わりに、配列への参照が の最初のデータ要素として渡され@_
ます。を印刷しようとすると、データ要素が配列であり、メモリ内のどこにある$_[0]
かを示すようなものが表示されます。ARRAY:6E43832
これで、関数を使用してref
、データの一部が参照であるかどうか、およびその参照のタイプを確認できます。
sub foo {
foreach my $item (@_) {
if (ref $item eq 'ARRAY') {
print "This element is a reference to an array\n";
}
elsif (ref $item eq 'HASH') {
print "This element is a reference to a hash\n";
}
elsif (ref $item) { #Mysterious Moe Reference
print "This element is a reference to a " . lc (ref $item) . "\n";
}
else {
print "This element is a scalar and it's value is '$item'\n";
}
}
}
もちろん、配列への参照は、配列などへの参照を含むハッシュへの参照を含む配列である可能性があります。データ構造全体を出力する Perl に付属のモジュール(それに関する情報を表示するためにData::Dumper
使用できます) が呼び出されます。perldoc
これがオブジェクト指向の Perl のしくみなので、Perl データの一部に埋め込まれた他の Perl データ構造への参照を持つことは非常に一般的です。
今は、基本的な Perl とその仕組みに慣れるだけです。次に、Perldoc にあるPerl リファレンスに関するさまざまなチュートリアルを参照してください。