use strict; use warnings; my $hash; $hash->{"AAA"}->{"KEY1"} = "VALUE1"; $hash->{"AAA"}->{"KEY2"} = "VALUE2"; $hash->{"AAA"}->{"KEY3"} = "VALUE3"; $hash->{"AAA"}->{"KEY9"} = "VALUE3"; $hash->{"AAA"}->{"KEY10"} = "VALUE3"; $hash->{"AAA"}->{"KEY123"} = "VALUE3"; $hash->{"AAA"}->{"KAY1"} = "VALUE1"; $hash->{"AAA"}->{"KAY2"} = "VALUE2"; $hash->{"AAA"}->{"KAY3"} = "VALUE3"; my @result = sort keys %{$hash->{"AAA"}}; print "@result\n"; #### KAY1 KAY2 KAY3 KEY1 KEY10 KEY123 KEY2 KEY3 KEY9 #### sub keycmp { $a =~ /^(\D*)(\d*)$/; my $a_txt = $1; my $a_num = $2; $b =~ /^(\D*)(\d*)$/; my $b_txt = $1; my $b_num = $2; if ($a_txt eq $b_txt) { return $a_num <=> $b_num } else { return $a_txt cmp $b_txt } } @result = sort keycmp keys %{$hash->{"AAA"}}; print "@result\n"; #### KAY1 KAY2 KAY3 KEY1 KEY2 KEY3 KEY9 KEY10 KEY123