Прежде всего, я хотел бы извиниться, если этот вопрос был задан. Трудно найти ответ, не найдя, как создавать массивы хэшей и хэши массивов....
Я создаю анализатор логов. Каждая запись об ошибке находится в форме
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 записей. Анализ выполняется довольно быстро, за исключением создания массива ошибок. Есть ли более эффективный способ создания этого массива?
Спасибо
$hash{++$counter} = ...
, спросите себя, не будет ли более уместно использовать массив ($array[++$counter] = ...
). - person mob   schedule 23.09.2011