#!perl use strict; use warnings; my %files_by; while () { my ($file_path, $file_name, $version) = m{^(.*/(.*))#(\d+)$}; push @{ $files_by{$file_name} }, { file_path => $file_path, version => $version, }; } for my $file_name (sort keys %files_by) { for my $href (@{ $files_by{$file_name} }) { print "File name: $file_name\n"; print "File path: $href->{file_path}\n"; print "File version: $href->{version}\n"; } } # This prints 6 print $files_by{'modem.c'}[2]{version}, "\n"; # This prints '//depot/asic/tools/perl/files/examples/apps.c' print $files_by{'apps.c'}[0]{file_path}, "\n"; __DATA__ //depot/asic/tools/perl/scripts/examples/modem.c#4 //depot/asic/tools/perl/scripts/examples/modem.c#5 //depot/asic/tools/perl/scripts/examples/modem.c#6 //depot/asic/tools/perl/scripts/examples/modem.c#7 //depot/asic/tools/perl/files/examples/file.txt#2 //depot/asic/tools/perl/proc/examples/apps.c#14