use strict; my @the_data = ( { field1 => 'first item', field2 => 8, field3 => 'z', }, { field1 => 'second item', field2 => 2, field3 => 'b', }, { field1 => 'third item', field2 => 6, field3 => 'c', }, ); # sort @the_data by field2 and field3... for ( sort { ($$a{field2} <=> $$b{field2}) && ($$a{field3} cmp $$b{field3}) } @the_data ) { print $$_{field1} . "\n"; } #### second item third item first item