いいえ、次のようなステートメントを使用します。
my ($v, $foo, $bar) = @_;
$v
@_
配列の最初の値、2 番目の値、というように割り当てられます$foo
。これは、括弧がリスト コンテキストを強制するためです。変数の 1 つが配列でない限り、余分な値は無視されます。配列の場合、残りのすべての値が丸呑みされます。
my ($v, @foo, $bar) = @_; # wrong! $bar will never get any value
$v
最初の値を取得し@foo
、残りはすべて取得します。$bar
未定義になります。
リストを使った代入を考えているかもしれません:
my $v = qw(a b c);
しかし、これは間違っており、エラーが発生します:
Useless use of a constant (a) in void context at -e line 1.
Useless use of a constant (b) in void context at -e line 1.
これは、LHS がスカラー コンテキストを使用しているためです。(多かれ少なかれ) 次のようになります。
'a';
'b';
my $v = 'c';
$v
括弧の中に入れてリスト コンテキストを強制すると、異なる結果が得られることに気付くかもしれません。
my ($v) = qw(a b c); # $v is now 'a'
ETA: プロトタイプについて:
ではf1
、サブルーチンがスカラー引数を想定しているため、配列が強制的にスカラー コンテキストになっていることがわかります。そのためf1
、配列の出力3
(サイズ) を使用します。プロトタイプが配列を探すとき、配列はデフォルトのリスト コンテキストのままであり、割り当ては通常どおりに行われます (上記のとおり)。
追加の注意として、プロトタイプには非常に特殊な用途があり、引数の処理に関してサブルーチンを特定の組み込み関数のように動作させることができます。sort { code here }
またはなどpush @array, $foo
。
これがあなたの求めているものでない場合は、プロトタイプをすべてスキップして、次のように単純に記述してください。
sub f1 {
...
}
ドキュメントはこちら