我在 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 仍然不正确。
最佳答案
尝试
my %metadata;
undef %metadata;
if (defined %metadata)
{
print "defined";
}
我认为它只是使用“undef”作为数据来填充散列。
“使用警告”会说:
defined(%hash) is deprecated at t.pl line 6.
(Maybe you should just omit the defined()?)
Odd number of elements in hash assignment at t.pl line 4.
Use of uninitialized value in list assignment at t.pl line 4.
undef, () or a populated hash
如果你真的想区分空散列和没有散列,最好使用散列引用(从子例程传递也更轻,没有传递复制等等)。
关于perl - 为什么我的哈希不是 undef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3958378/