use strict; use warnings; use Data::Dumper; our @array = ( ['ashok',15,'2006-01-01'], ['ashokpj',15,'2006-02-01'], ['ravi',56,'2006-03-01'], ['raja',56,'2006-02-01']); our %newest = ( map {($_->[1], $_)} sort { $a->[1] <=> $b->[1] || $a->[2] cmp $b->[2] } @array); our @res = (); push @res, $newest{$_} for sort {$a <=> $b} keys %newest; print Dumper(\@res); #### $VAR1 = [ [ 'ashokpj', 15, '2006-02-01' ], [ 'ravi', 56, '2006-03-01' ] ];