最初に、このような質問をされたことをお詫び申し上げます。ハッシュの配列と配列のハッシュを作成する方法を見つけることなく、答えを探すのは難しい....
ログアナライザーを作成しています。各エラー エントリの形式は次のとおりです。
timestamp # # human_timestamp errno #
次のことを行うために、マッピング関数を使用してハッシュのハッシュを作成しました。
$logRef->{++$errCnt} =
{
line => $lineNum,
timestamp => $timestamp,
humanStamp => $humanStamp,
errno => $errno,
text => ''
};
後で、行番号間のエントリを分離したい分析を行います。分析エントリもハッシュに保存されます...
$analysis{++$iteration} =
{
result => $result,
startLine => $startLine,
endLine => $endLine,
errors => undef
};
$analysis{errors} は配列参照になります。以下の操作で埋まります。
foreach my $iteration ( keys %analysis )
{
my @errKeys = grep { $logRef->{$_}{line} >= $analysis{$iteration}{startLine} &&
$logRef->{$_}{line} <= $analysis{$iteration}{endLine} }
keys %$logRef;
my @errs = ();
push @errs, $logRef->{$_}{errno} foreach ( @errKeys );
$analysis{$iteration}{errors} = \@errs;
}
ログ ファイルに 30000 以上のエントリが含まれることは珍しくありません。errs 配列の作成を除いて、分析はかなり迅速に実行されます。この配列を生成するより効率的な方法はありますか?
ありがとう