#!/usr/bin/perl use strict; use warnings; my @data = qw/12345.pdf 12345_-v1.pdf 12345_Av1.pdf 123456_-v1.pdf 123456_Av1.pdf 123456_Bv1.pdf g05495_1_-v1.pdf zprt0019548_wiper_die-nc_-1.pdf zprt0019548_wiper_die-nc_-2.pdf zprt0016809_fg_tooling_A2.pdf zprt0016809_fg_tooling_A3.pdf/; my %hash; my @unversioned; for my $f (sort @data) { my ($version,@key) = reverse split /_/,$f; my $key = join "_",reverse @key; if($key) { $hash{$key} = $version; } else { push @unversioned,$version; } } for my $key (keys %hash) { print $key . '_' . $hash{$key} . "\n"; } print join "\n",@unversioned,q{};