37

重複の可能性: 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ます。

4

5 に答える 5

64

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

calc(\@array, $scalar)

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

于 2012-05-23T23:03:00.437 に答える
19

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

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

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

reversed_args($scalar, @array);

Perl プロトタイプを試さないでください(2 つの記事、1 つは Stack Overflow、もう 1 つはPerlMonks です)。

于 2012-05-23T23:07:11.330 に答える
12

配列参照として配列を calc サブルーチンに渡します。

calc(\@array, $scalar);

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

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

  foreach my $item (@$array_ref) {
    # process each item in the array ref
  }
}
于 2012-05-23T23:04:58.913 に答える
11

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

calc(\@array, $scalar);

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

my $array = $_[0];

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

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

于 2012-05-23T23:04:54.340 に答える
1

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

于 2012-05-23T23:02:41.267 に答える