my @array = qw(001.file.a 001.file.b 002.file.a 002.file.b) ; my %groups; for my $filename ( @array ) { my $prefix = (split /\./, $filename)[0]; push @{ $groups{$prefix} }, $filename; } for ( keys %groups ) { print "group $_ has files @{ $groups{$_} }\n" }