Perl has an auto-activation feature that lets you create spring forests when you need it. This simplifies your code:
my %entries;
while(<>)
{
if (/complicated regex ommitted/)
{
my($key,@entry) = ($1, $2, $3, $4);
push @{ $entries{$key} }, \@entry;
}
}
There is no need to check if this is the first group of records for a given key.
To dump content %entries, use code similar to
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";
}
}