sub prefer { my @preferred = @_; sub { for ( @preferred ) { $a eq $_ and return -1; $b eq $_ and return 1; } $a cmp $b } } my $prefer = prefer('foo'); print "$_\n" for sort $prefer keys %h;