perl – 为什么我的哈希不是undef?
发布时间:2020-12-15 23:35:24 所属栏目:大数据 来源:网络整理
导读:我在Perl中有以下(从错误中理想化)短脚本: my %metadata = undef;if (defined %metadata){ print "defined";} 由于某种原因,程序的输出总是“定义”.因此,将哈希值设置为“未定义”会使其定义.它被定义为“未定义”吗? 编辑: 这是一个理想化的案例,试图复
我在Perl中有以下(从错误中理想化)短脚本:
my %metadata = undef; if (defined %metadata) { print "defined"; } 由于某种原因,程序的输出总是“定义”.因此,将哈希值设置为“未定义”会使其定义.它被定义为“未定义”吗? 编辑: 这是一个理想化的案例,试图复制问题.我实际上做的更像是: my %metadata = my_sub_function(); if (defined %metadata) { print "defined"; } my_sub_function的输出可能是undef,()或填充的哈希,我只想在最后一种情况下打印“已定义”. 编辑2: 顺便说一句,我发现了 if (scalar(keys %metadata) 行为正确的(),但仍然不适用于undef. 解决方法
如果你的函数返回undef并且undef被置于散列中,则自动字符串化会将undef更改为”,并且最终得到:%metadata =(”=> undef).
如果你的函数需要返回undef,()或正确的哈希,你需要分别测试所有三种情况,我建议: my %metadata = my_sub_function(); if ( !scalar keys %metadata ) { print "An empty list () was returnedn" } elsif ( scalar keys %metadata == 1 and exists $metadata{''} and !defined $metadata{''} ) { print "undef or '' was returnedn"; } else { print "A hash was hopefully returnedn"; } 您可以使用以下my_sub_functions对其进行测试: sub my_sub_function { return () } # 1st case sub my_sub_function { return undef } # 2nd case sub my_sub_function { return ( a => 1,b => 2 ) } # 3rd case sub my_sub_function { return qw/not a hash/ } # unhandled case 快乐的黑客 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |