Perl имеет функцию, называемую автовивификацией, которая оживляет леса, когда вам это нужно.Это делает ваш код простым:
my %entries;
while(<>)
{
if (/complicated regex ommitted/)
{
my($key,@entry) = ($1, $2, $3, $4);
push @{ $entries{$key} }, \@entry;
}
}
Нет необходимости проверять, является ли это первая группа записей для данного ключа.
Чтобы вывести содержимое %entries
, используйте кодчто напоминает
foreach my $key (sort keys %entries)
{
my $n = @{ $entries{$key} };
print "$key ($n):\n";
foreach my $l (@{ $entries{$key} })
{
print "\t$l->[0]: $l->[1] $l->[2]\n";
}
}