$ perl -Mstrict -Mwarnings -le ' my @xml_paths = qw{ 20120824/ABC/input/daily/11337111.xml 20120710/ABC/input/daily/11337101.xml 20120330/ABC/input/daily/11337111.xml 20130614/ABC/input/daily/11337890.xml 20130120/ABC/input/daily/11337111.xml 20120206/ABC/input/daily/11337111.xml 20121005/ABC/input/daily/11337890.xml 20130110/ABC/input/daily/11337111.xml 20120923/ABC/input/daily/11337111.xml 20130416/ABC/input/daily/11337101.xml 20120404/ABC/input/daily/11337111.xml 20130211/ABC/input/daily/11337111.xml }; my %latest; for (@xml_paths) { m{(.+\/)([^\/]+)}; $latest{$2} = $1 if ! $latest{$2} || ($latest{$2} cmp $1) < 0; } print for sort map { "$latest{$_}$_" } keys %latest; ' 20130211/ABC/input/daily/11337111.xml 20130416/ABC/input/daily/11337101.xml 20130614/ABC/input/daily/11337890.xml