2012-01-03 72 views
3

我想检查某个散列元素是否存在。我有两个密钥的哈希:Perl中散列元素的通配符

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

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

回答

5

没有通配符字符。

可以拿到钥匙的列表,像这样:

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

...然后你就可以检查,看它是否使用grep或任何具有长度,测试。

+6

你应该提到'keys $ hash {key1}'只适用于Perl> = 5.14。 – Axeman 2012-01-03 12:14:43

+3

对于早期版本,您需要'键%{$ hash {key1}}'。 – 2012-01-03 13:40:50

+0

其实它应该是:'my @keys_in_hash = keys%{$ hash {$ key1}};' – shawnhcorey 2012-01-03 14:26:31

3

你的原代码

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

如果你想检查第二级哈希包含任何键,那么你就可以做到这一点

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

如果你想拿起所有密钥与模式匹配,说所有开始“富”的键,然后你可以这样做:

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

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