サブルーチンが呼び出されると、渡されたパラメーターが特別な配列に入れられます@_
。値をシフトアウトするmy $foo = shift
か、配列を直接代入することで、この配列my ($foo,$bar)=@_;
を使用できます。配列から直接値を使用することもできます。$_[0]
なぜ 1 つと他のものを比較するのですか? 直接配列割り当ては、最も標準的で一般的な方法です。オプションの末尾の値がある場合、シフト方法が使用されることがあります。いくつかの小さなニッチ (特にオブジェクト内で他の関数を呼び出しているラッパー関数) を除いて、直接配列の使用は推奨されません。他の関数をラップして入力を変更する関数。また、 の特別な形式はgoto &func
、現在のコール スタックをすぐに削除し、 の現在の値で func を呼び出します@_
。
# use shift for optional trailing values
use v5.10;
my $foo = shift;
my $bar = shift // 'default bar value';
my $baz = shift // 'default baz value';
#obj method to call related non-object function.
sub bar { my $self = shift; _bar(@_) }
sub longname { shortname(@_) }
sub get { return $_[0]->$_[1]; }