2

特定の単語がハッシュのキーに存在するかどうかを確認したい。

私は次の方法で試しました:

while (($key, $value) = each(%hash))
{
   if( $key =~ /\b$some_word\b/ ) 
   {
      print"$key contains $some_word \n";
   } 
}

私の質問は、同じための組み込み関数がありますか、それとも別の方法がありますか?

4

1 に答える 1

5
use warnings;
use strict;

my %hash = (
    'foo' => 1,
    'foo bar' => 2,
    'bar' => 3,
    'food' => 4
);

my $some_word = "foo";

for (grep /\b\Q$some_word\E\b/, keys %hash)
{
    print "$_ contains $some_word (value: $hash{$_})\n" 
}

更新:値も含まれています。

更新 2:\Q...\E変数を正規表現に入れるときに通常は良いアイデアである引用リテラル修飾子 ( ) を提案してくれた kenosis に感謝します。これにより、変数内の何も正規表現のメタ文字として解釈されないことが保証されます。

于 2012-12-12T11:50:14.717 に答える