我使用了以下代码:
print "Enter the log file name \n";
chomp (my $log_file = <STDIN>);
my %log_hash ;
open(my $log, "<$log_file") or die "Can't open file";
while ( my $log_line = <$log> ) {
chomp($log_line);
my($log_key,$log_val) = split(" ", $log_line,2);
print $log_key , "\n";
print $log_val , "\n";
$log_hash{$log_key} = $log_val;
print $log_hash{$log_key};
}
当我运行它时,我看到只打印了最后一行。其余值不在log_hash
中。
我该如何纠正这个问题?
我试过这段代码,但仍然遇到同样的问题 日志文件:
instance_73 434 641
instance_83 428 635
instance_56 434 640...
我也使用代码打开命令文件 cmd文件:
CMD_1 447 632
CMD_2 449 643
CMD_3 434 632...
这没有问题。命令文件给出了预期的结果(键和值互换),但是对于日志文件,只存储了最后一行。
这是日志文件的结果:
...instance_91
446 631
instance_61
442 631
instance_40
448 647
448 647
这是针对命令文件:
447 632
CMD_1
CMD_1
449 643
CMD_2
CMD_2
434 632
CMD_3
CMD_3...
答案 0 :(得分:1)
如果没有一些样本输入,很难说清楚。然而,最可能的原因是哈希需要唯一的密钥,并且您的日志文件可能不会提供这些密钥。
考虑一个日志:
today some message
today another message
today some more messages
这些都将被插入到哈希元素today
中,并且每个都将相互覆盖。
检查这是否正在发生:
push ( @{$log_hash{$log_key}, $log_val );
然后使用Data::Dumper
查看:
print Dumper \%log_hash;
答案 1 :(得分:1)
您的代码正常运行,我只是改变了风格。请检查以下代码:
use strict;
use warnings;
print "Enter the log file name: ";
chomp (my $log_file = <STDIN>);
my %log_hash;
open my $log, "<", "$log_file" or die "Can't open file: $!";
while ( my $log_line = <$log> )
{
chomp $log_line;
my($log_key, $log_val) = split(" ", $log_line, 2);
print $log_key, "\n";
print $log_val, "\n";
$log_hash{$log_key} = $log_val;
print $log_hash{$log_key}, "\n";
}
close $log;
考虑您撰写的输入数据。
logfile输出:
instance_73
434 641
434 641
instance_83
428 635
428 635
instance_56
434 640
434 640
cmdfile输出:
CMD_1
447 632
447 632
CMD_2
449 643
449 643
CMD_3
434 632
434 632
答案 2 :(得分:0)
请检查以下代码:
Dim strMsg As String
strMsg = "<script language=javascript> alert('Hi'); </script>"
Page.RegisterStartupScript("alert", strMsg)