有更好的方法吗?我正在尝试根据标量的值构建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;
有没有parens,但没有去。
错误是:
Type of arg 1 to push must be array (not null operation) at comp_report.pl line 79, near "$r;"
答案 0 :(得分:13)
push要求它的第一个参数是一个实际的数组(至少在perl 5.14和更早版本之前 - 它可能已经改变了),而不是表达式,所以你需要:
push @{ $s eq 'YES' ? \@x : \@y}, $r;
从5.14开始,内置诸如推送experimentally can take arbitrary hard references,所以这有效:
push $s eq 'YES' ? \@x : \@y, $r;
答案 1 :(得分:9)
push @{ $s eq 'YES' ? \@x : \@y }, $r;
push
确实希望将数组作为其第一个参数,但您仍然可以使用引用动态选择目标。
答案 2 :(得分:1)
我首选的解决方案是
if($s eq 'YES'){
push @x, $r;
else{
push @y, $r;
}
只是一种风格的东西。使用三元表达作为推动的第一个参数看起来很麻烦,我不介意额外的行。个人品味我猜!