有条件地推送到Perl中的2个阵列中的1个

jeb*_*rle 6 perl

有一个更好的方法吗?我正在尝试根据标量的值构建2个数组:

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

我试过用:

push $s eq 'YES' ? @x : @y, $r;
Run Code Online (Sandbox Code Playgroud)

有没有parens,但没有去.

错误是:

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

yst*_*sth 13

push要求它的第一个参数是一个实际的数组(至少在perl 5.14和更早版本之前 - 它可能已经改变了),而不是表达式,所以你需要:

push @{ $s eq 'YES' ? \@x : \@y}, $r;
Run Code Online (Sandbox Code Playgroud)

从5.14开始,内置如推送实验可以采用任意硬引用,因此这有效:

push $s eq 'YES' ? \@x : \@y, $r;
Run Code Online (Sandbox Code Playgroud)


mel*_*ene 9

push @{ $s eq 'YES' ? \@x : \@y }, $r;
Run Code Online (Sandbox Code Playgroud)

push 我真的想要一个数组作为它的第一个参数,但你仍然可以通过使用引用动态选择目标.