2013-10-26 25 views

回答

3

第一件事是将数据分成列。在这种情况下,列由空格分隔。 split(/ /)将返回列的列表。

要从另一个中减去一个,它将值从列表中拉出并减去它们。

最后,您将差异添加到运行总和,然后循环遍历数据。

#!/usr/bin/perl 

use strict; 

my $sum = 0; 

while(<DATA>) { 
    my @vals = split(/ /); 
    my $diff = $vals[1] - $vals[0]; 
    $sum += $diff; 
} 

print $sum,"\n"; 

__DATA__ 
1 3 
3 5 
5 7 

这将打印出6 ---(3 - 1)+(5 - 3)+(7 - 5)

+1

使用'split//'几乎不会出现你想要的,因为它会为每个空间创建一个字段,将'foo bar baz'变成''foo','','bar','','',' baz''。使用默认的''''或特定的分隔符。 – TLP

2

仅供参考,如果您结合自动分割(-a),循环(n )和命令行程序(-e)参数(见perlrun),可以缩短这一个班轮,很像awk

perl -ane "$sum += $F[1] - $F[0]; END { print $sum }" filename 
相关问题