我想计算哈希中数组的值并将它们添加到哈希中。我的代码看起来像这样:
while(my $line=<$fh>) {
$timestamp = $1 if $line=~ /^\s*<timestamp>(.*)</;
$timestamp =~ s/^(\d\d\d\d-\d\d-\d\d)T.*\s*$/$1/;
$errorCode= $1 if $line=~ /^\s*<errorCode>(.*)</;
$hash{$timestamp} = {} unless($hash{$timestamp});
$hash{$timestamp}{$errorCode} = [] unless($hash{$timestamp}{$errorCode});
push @{$hash{$timestamp}{$errorCode}}, $1 if $line =~ /<errorText>(.*)</;
}
产量
'2019-04-05' => { '5005' => [
'Dies ist kein aktives Konto',
'Dies ist kein aktives Konto'
],
'7112' => [
'Eingabefelder nicht richtig gefuellt.',
'Eingabefelder nicht richtig gefuellt.',
'Eingabefelder nicht richtig gefuellt.'
],
}
我想拥有的是这样的:
'2019-04-05' => { '5005' => { 'Dies ist kein aktives Konto' => 2 },
'7112' => { 'Eingabefelder nicht richtig gefuellt.' => 3 },
}
谁能帮我这个?提前致谢。
你可以这样做
while (my $line=<$fh>) {
$timestamp = $1 if $line=~ /^\s*<timestamp>(.*)</;
$timestamp =~ s/^(\d\d\d\d-\d\d-\d\d)T.*$/$1/;
$errorCode= $1 if $line=~ /^\s*<errorCode>(.*)</;
$hash{$timestamp}{$errorCode}{$1}++ if $line =~ /<errorText>(.*)</;
}
无需检查中间结构的存在并手动创建它们。自动化将照顾到这一点。
只需添加另一层散列键访问权限并递增值即可。你最终会得到一个值的数量。