【发布时间】:2012-02-01 11:26:22
【问题描述】:
我正在尝试检查某个哈希元素是否存在。我有两个哈希键:
if (exists $hash{$key1}{*})
{
then do blabla
}
所以,在 * 所在的位置,我想使用通配符(即,该值可以是任何值)。在这种情况下,Perl 的通配符是什么?非常感谢!
【问题讨论】:
我正在尝试检查某个哈希元素是否存在。我有两个哈希键:
if (exists $hash{$key1}{*})
{
then do blabla
}
所以,在 * 所在的位置,我想使用通配符(即,该值可以是任何值)。在这种情况下,Perl 的通配符是什么?非常感谢!
【问题讨论】:
没有通配符。
你可以像这样得到一个键的列表:
my @keys_in_hash = keys %{ $hash{key1} };
...然后您可以检查它是否有长度,使用grep 或其他方式进行测试。
【讨论】:
keys $hash{key1} 仅适用于 Perl >= 5.14。
keys %{$hash{key1}}。
my @keys_in_hash = keys %{ $hash{ $key1 } };
您的原始代码
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}
}
【讨论】: