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);