假设有一个简单的 Perl 脚本 testme.pl,如下所示:
use strict;
use warnings;
sub testme {
return 1;
}
1;
还有一个像这样的测试文件testme.t:
use strict;
use warnings;
use Test::More;
require_ok('testing.pl');
ok(testme());
done_testing();
运行 perl testme.t
似乎按预期工作,但是 http://www.perlmonks.org/bare/?node_id=537361和 https://stackoverflow.com/a/9134624/272387建议加个package行,所以我修改原脚本为:
use strict;
use warnings;
package My::Testing;
sub testme {
return 1;
}
1;
现在测试失败了:
Undefined subroutine &main::testme called at testing.t
为什么会这样?
最佳答案
失败是因为您的 testme
子不再位于默认的 main
命名空间中,它现在位于 My::Testing
命名空间中(包裹)。您现在需要通过其全名 My::Testing::testme()
访问它。
main
中的标识符不需要显式指定它们的包,因为它是默认的,但这就是错误消息将其称为 main::testme
的原因.
(您还可以在 My::Testing
包中使用 Exporter
,导出子程序,然后从您的测试脚本中导入
作为将 sub 复制到测试脚本的命名空间中的一种方式。或者您可以将另一个 package My::Testing
命令放入测试脚本中,这样它就会在 My::Testing 中查找
默认命名空间。但将其引用为 My::Testing::testme()
是修复它的最简单方法,并且最清楚地说明了您收到的错误消息背后的原因。 )
关于perl - 为什么 Perl 模数中断测试中的 'package' 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074449/