%x = (foo=>1,bar=>2,baz=>3); sub exists_srk(\%$){my($h,$k)=@_; map{$_ eq $k?$_:()}(sort reverse keys %$h)}; print exists_srk(%x,$_) for qw(foo bar baz bat) #### sub exists_ggg (\%$) { my($h,$k) = @_; my $c; grep { len == len $k } grep /^\Q$k\E/ grep { $c++ == 0 } %$h };