@_
Perl の意味は何ですか?
回答:
perldoc perlvarは、特別な名前のPerl変数情報をチェックする最初の場所です。
引用:
@_
:サブルーチン内では、配列@_
にはそのサブルーチンに渡されたパラメーターが含まれています。
詳細については、perlvarからリンクされているperldoc perlsub(Perlサブルーチン)を参照してください。
渡された引数はすべて配列に表示され
@_
ます。したがって、2つの引数を持つ関数を呼び出すと、それらは
$_[0]
およびに格納され$_[1]
ます。配列
@_
はローカル配列ですが、その要素は実際のスカラーパラメータのエイリアスです。特に、要素$ _ [0]が更新されると、対応する引数が更新されます(更新できない場合はエラーが発生します)。引数が、関数が呼び出されたときに存在しなかった配列またはハッシュ要素である場合、その要素は、それが変更または参照された場合にのみ作成されます。(Perlの以前の一部のバージョンでは、要素が割り当てられているかどうかに関係なく、要素が作成されていました。)配列全体に割り当てる@_は、そのエイリアスを削除し、引数を更新しません。
通常、変数を使用してサブルーチンに渡されるパラメーターを展開します@_
。
sub test{
my ($a, $b, $c) = @_;
...
}
# call the test sub with the parameters
test('alice', 'bob', 'charlie');
これがperlcriticによって正しいと主張されている方法です。
perlcritic
、個人的には、これは関数に最適であると思いますが、メソッドの場合はshift
、自己参照して@_
配列をアンパックするのに役立ちます。これにより、これがメソッドであり、メソッドが特定のパラメーターをとることが明らかになります
@
配列に使用されます。
サブルーチンで、またはPerlで関数を呼び出すときに、パラメーターリストを渡すことができます。その場合、@_
isを使用してパラメーターリストを関数に渡すことができます。
sub Average{
# Get total number of arguments passed.
$n = scalar(@_);
$sum = 0;
foreach $item (@_){
# foreach is like for loop... It will access every
# array element by an iterator
$sum += $item;
}
$average = $sum / $n;
print "Average for the given numbers: $average\n";
}
Average(10, 20, 30);
上記のコードを確認したら、次のforeach $item(@_)
行を参照してください...ここでは、入力パラメーターを渡します。
use strict
です。したがって、私はあなたのサブ機能を編集しました。
@_変数を編集しようとしないでください!!!! それらに触れてはなりません。または、予期しない効果が発生します。例えば...
my $size=1234;
sub sub1{
$_[0]=500;
}
sub1 $size;
呼び出す前に、sub1 $ sizeには1234が含まれています。しかし、500(!!)の後は、この値を編集しないでください!!! 2つ以上の値を渡して、サブルーチンでそれらを変更すると、すべての値が変更されます。この効果が説明されているのを見たことがありません。私が見たプログラムも@_配列を読み取り専用のままにします。そして、あなたが安全に変数を渡すことができるということだけが内部サブルーチンを変更しませんあなたはいつもそれをしなければなりません:
sub sub2{
my @m=@_;
....
}
@_をローカルサブルーチンプロシージャ変数に割り当て、次にそれらを処理します。また、配列を返却するいくつかの深い再帰アルゴリズムでは、この方法を使用してローカル変数に使用されるメモリを減らすことができます。同じ@_配列を返す場合のみ。