use strict; use warnings; use Data::Dumper; my %hash; while() { my ($file_path,$file_name,$ver)=m{^(.*/(.*))\#(\d+)$}; %{$hash{$file_name}}=(file_path => $file_path, version => $ver); } print Dumper(\%hash); __DATA__ //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