我已经写了下面提到的代码来读取文件并将数据存储到数组@s_arr
。perl变量不存储块外的数据
但是,当我试图在块外打印@s_arr
数组时,它什么都没显示。
use Data::Dumper;
my @s_arr;
my @err;
my %sort_h_1;
$fname = '/qv/Error.log';
open(IN, "<$fname");
foreach $line (<IN>) {
if ($line =~ /CODE\+(\w{3})(\d{5})/) {
$a = "$1$2";
push @err, $a;
}
}
close IN;
$prev = "";
$count = 0;
my %hash;
foreach (sort @err) {
if ($prev ne $_) {
if ($count) {
$hash{$prev} = $count;
}
$prev = $_;
$count = 0;
}
$count++;
}
print Dumper \%hash;
printf("%s:%d\n", $prev, $count) if $count;
$hash{$prev} = $count;
my $c = 0;
print "Today Error Count\n";
foreach my $name (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
#printf "%-8s %s\n", $name, $hash{$name};
#my %sort_h ;
push @s_arr, $name;
push @s_arr, $hash{$name};
#$sort_h{$name} = $hash{$name} ;
#print Dumper \%sort_h ;
#print Dumper \@s_arr ;
$c++;
if ($c eq 30) {
exit;
}
}
print Dumper \@s_arr; # It's showing nothing
如果您希望人们通读它,请在发布问题时很好地缩进代码。正如你在上面很好地声明'@ s_arr',一个可以想象的理由是其中没有任何内容,但'Dumper'的'%hash'打印表明否则。所以......你的'$ c'实际上等于'30',所以这个程序安静地'退出'? (顺便说一下,应该使用'=='那里。) – zdim