my $mysortref = do { my @littlesubs = ( sub { lc($data{$a}[0]) cmp lc($data{$b}[0]) }, sub { lc($data{$a}[1]) cmp lc($data{$b}[1]) }, ); sub { foreach my $sub (@littlesubs) { my $result = $sub->($a, $b); return $result if $result; } }; }; @results = sort $mysortref (keys %data);