我的代码有什么问题吗?我的 DATA 有 4 个块,但我的代码仅打印前三个块的结果。当我从文件中读取数据时获得相同的结果。
#!/usr/bin/perl
use 5.30.3;
use warnings;
my $sum=0;
my $block=1;
while(<DATA>){
chomp(my $line = $_);
if ($line !~ /^$/){
$sum = $sum+$line;
}else{
say "Sum of block-${block}: $sum";
$sum = 0;
$block++;
}
}
__DATA__
345
478
300
255
100
1200
1000
4000
182
347
611
714
Run Code Online (Sandbox Code Playgroud)
打印结果:
Sum of block-1: 823
Sum of block-2: 655
Sum of block-3: 6200
Run Code Online (Sandbox Code Playgroud)
当遇到空行时,程序会打印总和,但数据结束后没有多余的行。解决此问题的一种方法是使用eof测试文件结尾。
程序稍微重新安排
use strict;
use warnings;
use feature 'say';
my $sum = 0;
my $block = 0;
while (my $line = <DATA>) {
chomp $line;
if ($line =~ /^$/ or eof DATA){
++$block;
say "Sum of block-$block: $sum";
$sum = 0;
} else {
$sum += $line;
}
}
say "Read $block blocks";
__DATA___
...
Run Code Online (Sandbox Code Playgroud)