Perl中哈希元素的通配符

时间:2012-01-03 12:02:24

标签: perl hash wildcard

我正在尝试检查某个哈希元素是否存在。哈希有两个键:

if (exists $hash{$key1}{*})
{
then do blabla
}

所以,在*的地方,我想使用通配符(即,该值可以是任何值)。在这样的情况下,Perl的通配符charachter是什么?非常感谢!

2 个答案:

答案 0 :(得分:5)

没有外卡字符。

你可以得到一个像这样的键列表:

my @keys_in_hash = keys %{ $hash{key1} };

...然后您可以检查它是否有长度,使用grep或其他任何方式进行测试。

答案 1 :(得分:3)

您的原始代码

if (exists $hash{$key1}{*})
{
then do blabla
}

如果你想检查二级哈希是否包含任何键,那么你可以这样做

if (%{$hash{$key1}}) {
    # do blabla
}

如果您想要获取与模式匹配的所有键,请说出所有以“foo”开头的键,那么您可以这样做:

my @matching_keys = grep m/^foo/so => keys %{$hash{$key1}};

if (@matching_keys) {
    # do something
    # matching values are in @{$hash{$key1}}{@matching_keys}
}
相关问题