use strict; use warnings; use Data::Dumper; my %books=( '34' => ['enlgish', 'dani M. rod', 54], '24' => ['spanish', 'ramk rovale', 41], '54' => ['enlgish', 'bob falicas', 17], ); my @sorted_list = map {$books{$_->[0]}} sort {lc $a->[1] cmp lc $b->[1]} map {[$_,$books{$_}[1] =~ /\b(\w+)$/]} keys %books ; print Dumper \@sorted_list;