#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; my @in = qw/ 1020300000_XXXXXXXXX_20160707193000.TXT 1020300000_XXXXXXXXX_20160707170000.TXT 1020300000_XXXXXXXXX_20160707190000.TXT /; my $final = GiveMeItTheThingIWant( \@in ); dd( $final, \@in ); sub GiveMeItTheThingIWant { my( $in ) = @_; my @ordered = map { $$_[1] } sort { $$a[0] cmp $$b[0] } map { #~ my( $left, $right ) = $_ =~ m{^([^_]+)_[^_]+_([^_]+)}; my( $left, $middle, $right , $txt ) = split /[_\.]/, $_; [ $right, $_ ]; } @{$in}; return $ordered[0]; #~ return '1020300000_XXXXXXXXX_20160707170000.TXT'; } __END__