scorpion:/export/home/kinyonro-> cat abcd #!/usr/local/bin/perl use strict; use 5.6.0; use efgh qw(do_thing); ############################################################################### my $foo = [ [ { blah => 'a' }, {blah => 'b'}, ], [ { blah => 'e' }, {blah => 'f'}, ], [ { blah => 'c' }, {blah => 'd'}, ], ]; my $sortfunc = sub { $a->[0]->{blah} cmp $b->[0]->{blah} }; my @bar = do_thing($foo, $sortfunc); for my $lref (@bar) { for my $hash (@$lref) { print "$_ => $hash->{$_}\n" for keys %$hash; } print "\n"; } ############################################################################### $foo = [ { blah => 'd' }, { blah => 'b' }, { blah => 'c' }, ]; $sortfunc = sub { $a->{blah} cmp $b->{blah} }; @bar = do_thing($foo, $sortfunc); for my $hash (@bar) { print "$_ => $hash->{$_}\n" for keys %$hash; print "\n"; } scorpion:/export/home/kinyonro-> cat efgh.pm use strict; use 5.6.0; package efgh; use Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(do_thing); use Data::Dumper; sub do_thing { my ($data, $func) = @_; print Data::Dumper->Dump([$data]); my @bar = sort $func @$data; print Data::Dumper->Dump([@bar]); return @bar; } 1; scorpion:/export/home/kinyonro-> abcd $VAR1 = [ [ { 'blah' => 'a' }, { 'blah' => 'b' } ], [ { 'blah' => 'e' }, { 'blah' => 'f' } ], [ { 'blah' => 'c' }, { 'blah' => 'd' } ] ]; $VAR1 = [ { 'blah' => 'a' }, { 'blah' => 'b' } ]; $VAR2 = [ { 'blah' => 'e' }, { 'blah' => 'f' } ]; $VAR3 = [ { 'blah' => 'c' }, { 'blah' => 'd' } ]; blah => a blah => b blah => e blah => f blah => c blah => d $VAR1 = [ { 'blah' => 'd' }, { 'blah' => 'b' }, { 'blah' => 'c' } ]; No such pseudo-hash field "blah" at abcd line 32.