我试图找出一种方法来检查在模块函数内部时是否在 Perl 脚本中声明了哈希。
给定以下脚本(文件script.pl):
#!/usr/bin/perl -w
use strict;
use checkHash;
our %testHash = ("key"=>"value");
print &checkHash() ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
连同这个模块(checkHash.pm);
sub checkHash {
if(%main::testHash) {
return 1;
}
else {
return 0;
}
}
1;
Run Code Online (Sandbox Code Playgroud)
在装有OS X v10.6.7 (Snow Leopard) 和 Perl v5.10.0的 Mac 上运行,checkHash 的返回值是我所期望的“1”。但是,如果我通过更改行从脚本中删除键值对:
our %testHash = ("key"=>"value");
Run Code Online (Sandbox Code Playgroud)
到:
our %testHash = ();
Run Code Online (Sandbox Code Playgroud)
返回值为“0”。我最初的假设是这将是“1”,但在阅读了我正在使用的测试方法测试散列中的大小后,我明白为什么这是不正确的想法。
是否有可以在 checkHash 模块中使用的测试,如果它测试的哈希存在,则返回 true,但没有为其分配任何键?
defined() 不是对聚合(数组和散列)的有意义的测试。 perldoc -f defined是这样说的:
不推荐在聚合(散列和数组)上使用“定义”。它用于报告该聚合的内存是否曾经被分配过。这种行为可能会在 Perl 的未来版本中消失。您应该改为使用简单的大小测试:
Run Code Online (Sandbox Code Playgroud)if (@an_array) { print "has array elements\n" } if (%a_hash) { print "has hash members\n" }
| 归档时间: |
|
| 查看次数: |
7214 次 |
| 最近记录: |