我一直在学习Perl几天,我是全新的。
代码应该从一个大文件中读取,如果一行包含“警告”,它应该存储它并将其打印在一个新行上,并计算每种类型警告的出现次数。文件中有不同类型的警告,例如“警告GR145”或“警告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;
答案 0 :(得分:1)
您在if
声明中使用区分大小写的匹配。尝试添加/i
:
if($line =~ /warning ([a-z0-9]*):/i)
编辑:我误解了实际问题,所以这个答案可能会被忽略......
答案 1 :(得分: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";
}