#! /usr/bin/env perl use strict; use warnings; my @unsorted = ( { 'ZLANED' => [ { 'CO' => 'AAA' }, { 'AT' => 'AA' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => '00' } ] }, { 'IWWAST' => [ { 'CO' => 'ABC' }, { 'AT' => 'AA' } ] }, { 'UXWAGL' => [ { 'CO' => 'ABC' }, { 'AT' => 'EF' } ] }, { 'E3000E' => [ { 'CO' => '123' }, { 'AT' => 'CC' } ] }, { 'IWWAST' => [ { 'CO' => 'AAA' }, { 'AT' => 'AB' } ] }, ); # Keyword: Schwartzian Transform my @sorted = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, keys %$_ ] } @unsorted; require Data::Dumper; print Data::Dumper->new( [ \@sorted ], [ 'sorted' ] )->Maxdepth(2)->Dump();