sub sort_maker { my @subs = @_; sub { foreach my $sub (@subs) { my $result = $sub->(); # you use $a and $b in your littlesubs - no need to pass in globals. return $result if $result; } } } my $sorter = 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);