1

私は次のコードのようなものを持っています

my @array = ["hello","hi","fish"];
sub this_sub {
  my $first = $_[0];
  my $second = $_[1];
  my $third = $_[2];
}
this_sub(@array);

配列を引数リストに展開して、1番目、2番目、3番目が配列内の文字列から値を取得するようにするにはどうすればよいですか。以下のように。

  • 最初="こんにちは"
  • 秒="こんにちは"
  • 3番目=「魚」
4

2 に答える 2

6

あなたのコードは間違っています。リストを配列に割り当てるには、通常の括弧で囲みます。

my @array = ("hello", "hi", "fish");

角かっこは、匿名配列、つまりスカラーであるリストへの参照を定義します。

my $array_ref = ["hello", "hi", "fish"];

参照を送信する場合は、サブで参照を解除する必要があります。

sub this_sub {
    my ($first, $second, $third) = @{ $_[0] };
}
于 2012-09-03T13:25:58.117 に答える
1

通常、問題のサブルーチンにアクセスできないため、配列を引数リストに展開できると便利な場合があります。これが私の解決策です。

sub test_sub($$$) {
    my ($a,$b,$c) = @_;
    say "$a $b $c";
}
my @array = ('happy', 'birthday', 'to you');
my $eval_str = 'test_sub(' join ', ', @array . ')';
eval $eval_str;

それはやや醜いです、うまくいけば他の誰かが改善されたバージョンを提案することができます。

于 2015-02-14T05:19:33.370 に答える