如何在元素方面对两个列表求和

par*_*ras 3 perl list

我想逐行解析一个文件,每个文件包含两个整数,然后将这些值加在两个不同的变量中.我天真的做法是这样的:

my $i = 0;
my $j = 0;
foreach my $line (<INFILE>)
{
    ($i, $j) += ($line =~ /(\d+)\t(\d+)/);
}
Run Code Online (Sandbox Code Playgroud)

但它会产生以下警告:

在void上下文中无用的私有变量

暗示使用+ =运算符触发标量中左侧的评估而不是列表上下文(如果我在这一点上错了,请纠正我).

是否可以优雅地(可能在一行中)实现这一点而不诉诸数组或中间变量?


相关问题:如何在Perl中以元素方式对数组求和?

dax*_*xim 6

不,这是因为表达式($i, $j) += (something, 1)解析为加入1$j才,留$i在无效的情况下挂.Perl 5没有超级运算符或自动压缩赋值运算符,如+=.这有效:

my ($i, $j) = (0, 0);
foreach my $line (<INFILE>) {
    my ($this_i, $this_j) = split /\t/, $line;
    $i += $this_i;
    $j += $this_j;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过使用复合数据结构而不是列的命名变量来避免重复.