my $field = "name"; sub numsort { $a->{$field} <=> $b->{$field} } sub alphasort { $a->{$field} cmp $b->{$field} } my @data = ( { name => 'jim', age => 16 }, { name => 'bob', age => 18 }, ); my $sortsub = $field eq "name" ? 'alphasort' : 'numsort'; my @sorted; { no strict 'refs'; @sorted = sort $sortsub @data; } #### sort $sortsub @data