我有這個數據集 - 我只關心類ID,進程@服務器: 我想加載所有三個到多級哈希。填充多級哈希
class_id: 995 (OCAive ) ack_type: NOACK supercede: NO copy: NO bdcst: NO
PID SENDS RECEIVES RETRANSMITS TIMEOUTS MEAN S.D. #
21881 ([email protected] ) 1 1 0 0
24519 ([email protected] ) 1 1 0 0
26163 ([email protected] ) 1 1 0 0
28069 ([email protected] ) 23 4 0 0
28144 ([email protected] ) 33 5 0 0
29931 ([email protected] ) 1 1 0 0
87331 ([email protected] ) 1 1 0 0
---------- ---------- ---------- ---------- ------- ------- ------
61 14 0 0
當我嘗試填充散列,它並沒有得到多少(以下數據翻鬥結果)
$VAR1 = '';
$VAR2 = {
'' => undef
};
這是代碼:
#!/usr/bin/perl -w
use strict;
my $newcomm_dir = "/home/casper-compaq/work_perl/newcomm";
my $newcomm_file = "newcomm_stat_result.txt";
open NEWCOMM , "$new_comm_dir$newcomm_file";
while (<NEWCOMM>) {
if ($_ =~ /\s+class_id:\s\d+\s+((\w+)\s+)/){
my $message_class = $1;
}
if ($_ =~ /((\w+)\@\w+\s+)/) {
my $process = $1;
}
if ($_ =~ /(\w+\@(\w+)\s+)/) {
my $servers = $1;
}
my $newcomm_stat_hash{$message_class}{$servers}=$process;
use Data::Dumper;
print Dumper (%newcomm_stat_hash);
}
文件沒有被打開 - 並且變量超出了範圍 - 在腳本的根目錄(開始)對它們進行了範圍填充散列。哈希的更深層節點的合併,我真的很喜歡。從來沒有見過它,它使哈希更可讀。 $ newcomm_stat_hash {$ message_class} {$ 2} = $ 1 – capser
@capser您應該用綠色複選標記標記答案,以表示最佳答案。 – TLP
所有的評論都很有幫助,但是減少一些語句使得代碼更具可讀性。 $ newcomm_stat_hash {$ message_class} {$ 2} = $ 1; – capser