在Perl中添加或汇总每行中的数字

时间:2012-03-29 14:15:35

标签: perl sum

我想在每一行添加数字。 例如,我的行后面没有,

@lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

我想分别为每一行添加数字。每行中的 第一个数字 (1,2和3)是行号,我 不想包含 < / strong>总结。

我试过了:

($total+=$_) for @temp[1..$#temp];
print "The row adds up to $total";

它给了我最后一行的总数,即第3行= .54

请建议我如何解决此问题。

谢谢

2 个答案:

答案 0 :(得分:3)

只需将每个字符串拆分为空格(split的默认值),然后使用splice提取除第一个元素以外的所有字符串。使用map生成一个要添加的长号列表。代码看起来像这样

use strict;
use warnings;

my @lines = ("1 .2 .3 .4 .5", "2  .7 .8 .8  .10 ", "  3 .12 .13  .14 .15");

my $total;
$total += $_ for map { my @f = split; splice @f, 1; } @lines;

print $total;

<强>输出

4.34

修改

我的道歉 - 我刚刚注意到你想要分别为每个字符串的总数。这是我的解决方案

use strict;
use warnings;

my @lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

print "$_\n" for map {
  my @f = split;
  my $total;
  $total += $_ for splice @f, 1;
  $total;
} @lines;

<强>输出

1.4
2.4
0.54

答案 1 :(得分:2)

实际上0.54是第3行imho的正确总和。 这是一个代码片段,用于计算所有3行的总和。

@lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

foreach (@lines) {
        @row=split;

        $total=0;
        $total+=$_ for @row[1..$#row];

        print "Result $row[0]: $total\n";
}

输出:

Result 1: 1.4
Result 2: 2.4
Result 3: 0.54