【发布时间】:2012-05-21 18:48:03
【问题描述】:
我正在尝试一种在 Perl 脚本中调用子例程的不同方式。
我有一组函数如下:
sub Testcase_CheckStatus {
print "TestCase_CheckStatus called\n";
}
然后我正在使用“CheckStatus”之类的键遍历 Perl 哈希:
while (my ($k, $v) = each %test_cases) {
print "TestCase_$k","\n";
Testcase_$k();
}
基本上,我想在解析哈希键时像上面一样调用函数Testcase_CheckStatus,但是我收到了这个错误:
无法在 ./main.pl 第 17 行通过包“CheckStatus”定位对象方法“Testcase_”(也许您忘记加载“CheckStatus”?)
我可以做些什么来纠正这个问题?有没有其他方法可以做到这一点?
【问题讨论】:
-
请注意,在“严格”模式下这是不允许的,这是有原因的。在运行时构建函数或变量名是危险且脆弱的。另一方面,wk 的解决方案(使用匿名函数的散列)给出了完全相同的结果,并且既安全又完全地道。
-
重要背景阅读:“为什么使用变量作为变量名是愚蠢的”(part 1、part 2 和 part 3)作者 Mark Dominus,出色的 Higher Order Perl 的作者.
标签: perl subroutine