그래,라고 :
use List::Util qw<first>;
# Your regex does not compile perhaps you mean /teen$/
my $value = $hash{ (first { m/teen/ } keys %hash) || '' };
(스마트 일치하기 전에, 즉 스마트 일치 폭도의 답변을 참조하십시오.).
에게 당신을 키를 정렬 할 수도 있습니다 :
my $value = $hash{ (first { m/teen/ } sort keys %hash) || '' };
내가 "작업"이 점을 동결 :
use Scalar::Util qw<reftype>;
sub values_for_keys_like (\[%$]$) {
my $ref = reftype($_[0]) eq 'HASH' ? $_[0] : $$_[0];
return unless my @keys = keys %$ref;
my $regex = shift;
# allow strings
$regex = qr/$regex/ unless my $typ = ref($regex);
# allow regex or just plain ol' filter functions.
my $test = $typ eq 'CODE' ? $regex : sub { return unless m/$regex/; 1 };
if (wantarray) {
return unless my @k = grep { defined $test->($_) } @keys;
return @$ref{ @k };
}
else {
return unless my $key = first { defined $test->($_) } @keys;
return $ref->{ $key };
}
}
그리고 당신과 같이 사용할 수 있습니다 : 다른 답변에 추가
my $key = values_for_keys_like(%hash => qr/teen/);
또는
my $key = values_for_keys_like($base->{level_two}{level_three} => qr/teen/);
'십대 $'를 사용하면'. *'는 불필요합니다. – Axeman