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