6

これを行うより良い方法はありますか?スカラーの値に基づいて 2 つの配列を構築しようとしています。

my (@x, @y);
my $r = [$v1, $v2, $v3];
push @x, $r if $s eq 'YES';
push @y, $r if $s ne 'YES';

私は使用してみました:

push $s eq 'YES' ? @x : @y, $r;

括弧ありとなしがありますが、行きません。

エラーは次のとおりです。

Type of arg 1 to push must be array (not null operation) at comp_report.pl line 79, near "$r;"
4

3 に答える 3

13

push では、最初のパラメータが式ではなく実際の配列 (少なくとも perl 5.14 以前では変更されている可能性があります) である必要があるため、次のようにする必要があります。

push @{ $s eq 'YES' ? \@x : \@y}, $r;

5.14 以降では、実験的に push などのビルトインが任意のハード参照を取得できるため、次のように動作します。

push $s eq 'YES' ? \@x : \@y, $r;
于 2013-01-21T19:55:38.167 に答える
9
push @{ $s eq 'YES' ? \@x : \@y }, $r;

push最初の引数として配列を取得したいのですが、参照を使用してターゲットを動的に選択することもできます。

于 2013-01-21T19:55:51.857 に答える
1

私の好ましい解決策は

if($s eq 'YES'){
   push @x, $r; 
else{
    push @y, $r;
}

ただのスタイルです。push の最初の引数として三項式を使用するのは面倒に見えますが、余分な行は気にしません。個人的な好みだと思います!

于 2013-01-22T08:37:33.107 に答える