让我们说一个简单的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建议添加包行,因此我将原始脚本修改为:
use strict;
use warnings;
package My::Testing;
sub testme {
return 1;
}
1;
现在测试失败了:
Undefined subroutine &main::testme called at testing.t
为什么会这样?
答案 0 :(得分:7)
它失败是因为您的testme
sub不再位于默认的main
命名空间中,它现在位于My::Testing
命名空间(包)中。您现在需要以其全名My::Testing::testme()
。
main
中的标识符不需要明确指定其包,因为它是默认值,但这就是错误消息将其称为{{1}的原因}。
(您也可以在main::testme
包中use Exporter
导出子版,然后从测试脚本中My::Testing
将其作为将子文件复制到测试脚本中的方式&#39} ; s命名空间。或者您可以将另一个import
命令放入测试脚本中,以便默认情况下它会在package My::Testing
命名空间中查找。但是将其引用为My::Testing
是最简单的方法修复它并且最明确地说明了您获得的错误消息背后的原因。)