【问题标题】:Wildcard for hash element in PerlPerl 中哈希元素的通配符
【发布时间】:2012-02-01 11:26:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl hash wildcard


    【解决方案1】:

    没有通配符。

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

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

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

    【讨论】:

    • 您应该提到keys $hash{key1} 仅适用于 Perl >= 5.14。
    • 对于早期版本,您需要keys %{$hash{key1}}
    • 其实应该是:my @keys_in_hash = keys %{ $hash{ $key1 } };
    • 看我的回答(好多了)
    【解决方案2】:

    您的原始代码

    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}
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2016-04-15
      • 1970-01-01
      • 2016-05-19
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2023-03-08
      相关资源
      最近更新 更多