微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确定Perl哈希是否包含映射到未定义值的键?

我需要确定Perl哈希是否具有给定键,但该键将映射到undef值.具体来说,这样做的动机是在使用带有散列引用的getopt()时看到布尔标志.我已经搜索了这个网站和谷歌,而且exists()和defined()似乎不适用于这种情况,他们只是看看给定键的值是否未定义,他们不检查是否哈希实际上有关键.如果我是RTFM,请指出解释此问题的手册.

解决方法

exists() and defined() don’t seem to be applicable for the situation,they just see if the value for a given key is undefined,they don’t check if the hash actually has the key

不正确.这确实是define()的作用,但exists()完全符合你的要求:

my %hash = (
    key1 => 'value',key2 => undef,);

foreach my $key (qw(key1 key2 key3))
{
    print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
    print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}

生产:

$hash{key1} exists: yes
$hash{key1} is defined: yes
$hash{key2} exists: yes
$hash{key2} is defined: no
$hash{key3} exists: no
$hash{key3} is defined: no

这两个函数的文档可以在命令行中找到perldoc -f defined和perldoc -f exists(或者阅读perldoc perlfunc *中所有方法的文档).官方网站文档在这里

> http://perldoc.perl.org/functions/exists.html
> http://perldoc.perl.org/functions/defined.html

*由于您特别提到了RTFM并且您可能不知道Perl文档的位置,我还要指出您可以在perldoc perl或http://perldoc.perl.org获得所有perldoc的完整索引.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐