为什么'打包' Perl modulino中断关键字测试?

时间:2015-10-12 06:22:23

标签: perl testing modulino

让我们说一个简单的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=537361https://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

为什么会这样?

1 个答案:

答案 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是最简单的方法修复它并且最明确地说明了您获得的错误消息背后的原因。)

相关问题