使用完全限定名称调用模块子例程
Calling a module subroutine using a fully qualified name
我创建了一个简单的测试模块./mods/My/Module.pm6
:
unit module My::Module;
use v6;
sub hello () is export {
say "Hello";
}
然后,我有一个测试脚本./p.p6
:
#! /usr/bin/env perl6
use v6;
use My::Module;
My::Module::hello();
然后我设置 PERL6LIB
以包含文件夹 ./mods
,然后 运行 脚本:
$ ./p.p6
Could not find symbol '&hello'
in block <unit> at ./p.p6 line 7
但是,如果我将脚本中的行 My::Module::hello()
替换为 hello()
,它就可以正常工作。我在这里错过了什么?
如果导出 hello 就可以简单地使用它
use v6;
use lib <lib>; # hint: no need to tinker with the environment
use My::Module;
hello();
如果您真的想使用完全限定名称,则必须使用 our 关键字。
our sub hello () is export {
say "Hello";
}
我创建了一个简单的测试模块./mods/My/Module.pm6
:
unit module My::Module;
use v6;
sub hello () is export {
say "Hello";
}
然后,我有一个测试脚本./p.p6
:
#! /usr/bin/env perl6
use v6;
use My::Module;
My::Module::hello();
然后我设置 PERL6LIB
以包含文件夹 ./mods
,然后 运行 脚本:
$ ./p.p6
Could not find symbol '&hello'
in block <unit> at ./p.p6 line 7
但是,如果我将脚本中的行 My::Module::hello()
替换为 hello()
,它就可以正常工作。我在这里错过了什么?
如果导出 hello 就可以简单地使用它
use v6;
use lib <lib>; # hint: no need to tinker with the environment
use My::Module;
hello();
如果您真的想使用完全限定名称,则必须使用 our 关键字。
our sub hello () is export {
say "Hello";
}