0

我已经学习 Perl 几天了,我是全新的。

该代码应该从一个大文件中读取,如果一行包含“警告”,它应该存储它并在新行上打印它,并计算每种警告的出现次数。文件中有不同类型的警告,例如“warning GR145”或“warning GT10”等。

所以我想打印类似的东西

Warning GR145 14 warnings
Warning GT10  12 warnings

等等

问题是当我运行它时,它不会打印整个警告列表。我会感谢你的帮助。这是代码:

use strict;
use warnings;

my @warnings;

open (my $file, '<', 'Warnings.txt') or die $!;

while (my $line = <$file>)  {
  if($line =~ /warning ([a-zA-Z0-9]*):/) {
    push (@warnings, $line);
    print $1 ,"\n";
  }
}

close $file;
4

2 回答 2

1

if您在语句中使用区分大小写的匹配。尝试添加/i

if($line =~ /warning ([a-z0-9]*):/i)

编辑:我误读了实际问题,因此可以忽略此答案...

于 2012-11-19T12:33:41.603 回答
0

您需要使用哈希数组,即从警告字符串到出现次数的映射。

use strict;
use warnings;

my %warnings = {};

open (my $file, '<', 'Warnings.txt') or die $!;
while (my $line = <$file>)  {
    if ($line =~ /warning ([a-zA-Z0-9]*)\:.*/) {
        ++$warnings{$1};
    }
}
close $file;

foreach $w (keys %warnings) {
    print $w, ": ", $warnings{$w}, "\n";
} 
于 2012-11-19T12:47:26.737 回答