可能性のある複製:1つの配列と1つの文字列を関数に引数として渡す方法
最初のパラメーターを配列として、2番目のパラメーターをスカラーとして受け取る関数またはサブルーチンがあります。例えば、
sub calc {
my @array = $_[0];
my $scalar = $_[1];
print @array, $scalar;
}
問題は、関数が渡された配列の最初の値に等しい配列を作成し、渡された配列の2番目の値をスカラーに設定していることです。最初の配列を配列全体にしたいときは、配列の詳細コピーを作成する必要があります。例えば、
my @array = ('51', 'M');
my $scalar = 21;
そして
calc(@array, $scalar)
51 M
欲しいとき51 M 21
。
参照として渡す必要があります。
calc(\@array, $scalar)
そして、次のようにアクセスします:my @array = @{$_[0]};
配列を配列リファレンスとしてcalcサブルーチンに渡します。
calc(\@array, $scalar);
次に、calcサブルーチンで、次のように入力パラメーターを初期化します。
sub calc {
my($array_ref, $scalar) = @_;
foreach my $item (@$array_ref) {
# process each item in the array ref
}
}
配列への参照を関数に渡すことができます。
calc(\@array, $scalar);
サブルーチンで@arrayの要素にアクセスする必要がある場合、次のように実行できます。
my $array = $_[0];
# access first element of array
print $array->[0];
編集:これは元の配列への参照であるため、サブルーチンで行われた変更はすべて元の配列に反映されます。
Perlサブルーチンの引数リストは、単なるフラット配列です。個別の配列を渡す場合は、配列参照として渡す必要があります。