scorpion:/export/home/kinyonro-> cat abcd #!/usr/local/bin/perl use strict; use efgh qw(do_thing); my $foo = [ { blah => 'd' }, { blah => 'b' }, { blah => 'c' }, ]; my $sortfunc = sub { $a->{blah} cmp $b->{blah} }; my @bar = do_thing($foo, $sortfunc); for my $hash (@bar) { print "$_ => $hash->{$_}\n" for keys %$hash; print "\n"; } scorpion:/export/home/kinyonro-> cat efgh.pm 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' => 'd' }, { 'blah' => 'b' }, { 'blah' => 'c' } ]; $VAR1 = { 'blah' => 'd' }; $VAR2 = { 'blah' => 'b' }; $VAR3 = { 'blah' => 'c' }; blah => d blah => b blah => c