web-dev-qa-db-ja.com

配列とスカラーをPerlサブルーチンに渡す

可能性のある複製: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

28
E.Cross

参照として渡す必要があります。

calc(\@array, $scalar)

そして、次のようにアクセスします:my @array = @{$_[0]};

48
happydave

最初の引数として配列への参照を使用するか、引数を逆にして、スカラーが最初になり、その後に配列が来るようにします。

sub reversed_args
{
   my($scalar, @array) = @_;
   # ...
   print @array, $scalar, "\n";
}

my @array = ('51', 'M');
my $scalar = 21;

reversed_args($scalar, @array);

Perlプロトタイプ (Stack Overflowに1つ、 PerlMonks に1つ)を試さないでください。

16

配列を配列リファレンスとしてcalcサブルーチンに渡します。

calc(\@array, $scalar);

次に、calcサブルーチンで、次のように入力パラメーターを初期化します。

sub calc {
  my($array_ref, $scalar) = @_;

  foreach my $item (@$array_ref) {
    # process each item in the array ref
  }
}
10
Sam Choukri

配列への参照を関数に渡すことができます。

calc(\@array, $scalar);

サブルーチンで@arrayの要素にアクセスする必要がある場合、次のように実行できます。

my $array = $_[0];

# access first element of array
print $array->[0];

編集:これは元の配列への参照であるため、サブルーチンで行われた変更はすべて元の配列に反映されます。

9
Peter Willsey

Perlサブルーチンの引数リストは、単なるフラット配列です。個別の配列を渡す場合は、配列参照として渡す必要があります。

1