ファイルを読み込んでデータを格納するために、以下のコードを記述しました。@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'と等しくなるので、プログラムは静かに 'exit'sですか? (Btwはそこで '=='を使うべきです) – zdim