【发布时间】:2011-07-26 23:58:27
【问题描述】:
我正在尝试找出一种方法来检查是否在模块函数内部的 Perl 脚本中声明了哈希。
给定以下脚本(文件script.pl):
#!/usr/bin/perl -w
use strict;
use checkHash;
our %testHash = ("key"=>"value");
print &checkHash() ? 1 : 0;
连同这个模块(checkHash.pm);
sub checkHash {
if(%main::testHash) {
return 1;
}
else {
return 0;
}
}
1;
在带有OS X v10.6.7 (Snow Leopard) 和 Perl v5.10.0 的 Mac 上运行,checkHash 的返回值为“1”,这是我所期望的。但是,如果我通过更改行从脚本中删除键值对:
our %testHash = ("key"=>"value");
到:
our %testHash = ();
返回值为“0”。我最初的假设是这将是“1”,但是在阅读了我正在使用的测试方法是测试哈希中的大小之后,我明白了为什么这是错误的想法。
是否有一个可以在 checkHash 模块中使用的测试,如果它正在测试的哈希存在,但没有分配任何键,则该测试将返回 true?
【问题讨论】:
-
为什么?您真正想要完成什么?我之所以这么问,是因为在我的一生中,我从未遇到过需要这样的测试的情况。
-
我正在构建一个小框架模块,用于设置一些基本的日志记录、调试和其他常用功能。我打算在主脚本中使用用“我们的”定义的散列来来回传递一些信息给框架模块。当我引导框架时,我想检查以确保散列存在。这就是问题的起点。由于主脚本只会定义哈希,但没有值,我无法弄清楚。 (注意:我现在正在考虑调用引导程序来填充哈希,但我仍然想知道这个问题的答案)。
-
您的问题的答案是一个问题:您认为“定义”是什么意思?听起来您认为它与“声明”的含义相同。它没有。
-
@darch - 是的。我基本上认为“定义”和“声明”是一回事。我试图围绕这一点写作,但显然,这会造成混乱。我将更新这个问题,以帮助将来遇到此问题的任何人解决这个问题。