在一行Perl中执行多个+ =

时间:2012-10-02 03:17:04

标签: perl variables equals

在Perl中,可以像这样实例化多个变量:

my ($a, $b, $c) = (1,2,3);

也可以用相同的方式重新分配多个变量值:

($a, $b, $c) = (4,5,6);

然而,当我尝试用加号等于运算符做同样的事情时,

($a, $b, $c) += (7,8,9);

仅正确添加$c,其他变量保持原始值。这是Perl应该可行的东西,还是只是偶然部分工作而且它真的不起作用?如果后者是真的,有没有办法在一行中达到这个目的?

2 个答案:

答案 0 :(得分:12)

  

它只是偶然部分工作,它真的不起作用吗?

标量上下文中的列表运算符依次计算其每个操作数,并返回其最后一个操作数计算的值。所以你基本上做了以下事情:

do { $a; $b; $c } += do { 7; 8; 9 };

这就是为什么你得到以下

Useless use of a constant (7) in void context at -e line 1.
Useless use of a constant (8) in void context at -e line 1.
Useless use of a variable in void context at -e line 1.
Useless use of a variable in void context at -e line 1.

  

有没有办法在一行中找到这个?

当然,有无数的。这是三个:

$a += 7; $b += 8; $c += 9;

${$_->[0]} += $_->[1] for [\$a,7],[\$b,8],[\$c,9];

use List::MoreUtils qw( pairwise );
pairwise { $$a += $b; } @{[\$x,\$y,\$z]}, @{[7,8,9]};

答案 1 :(得分:6)

+=的简写版本应该有效:

($a,$b,$c) = ($a+7,$b+8,$c+9)