Module 使用完全限定名调用模块子例程

Module 使用完全限定名调用模块子例程,module,raku,Module,Raku,我创建了一个简单的测试模块/code>/mods/My/module.pm6: unit module My::Module; use v6; sub hello () is export { say "Hello"; } #! /usr/bin/env perl6 use v6; use My::Module; My::Module::hello(); 然后,我有一个测试脚本/p.p6: unit module My::Module; use v6; sub hello (

我创建了一个简单的测试模块/code>/mods/My/module.pm6

unit module My::Module;
use v6;

sub hello () is export {
    say "Hello";
}
#! /usr/bin/env perl6

use v6;
use My::Module;

My::Module::hello();
然后,我有一个测试脚本
/p.p6

unit module My::Module;
use v6;

sub hello () is export {
    say "Hello";
}
#! /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
$。/p.p6
找不到符号“&hello”
在块中。/p.p6第7行

但是,如果我将脚本中的行
My::Module::hello()
替换为
hello()
,它就可以正常工作。我在这里遗漏了什么?

如果您导出hello,您只需使用它即可

use v6;
use lib <lib>; # hint: no need to tinker with the environment
use My::Module;

hello();

可能是因为默认情况下,
sub
s是
my
,因此外部世界看不到它们的全名。即使它们是出口的?比较
class A{sub B(){say“B”};A::B()
类A{our sub B(){say“B”};A::B()
@ElizabethMattijsen似乎就是这样!将模块中的声明更改为
我们的子hello()…
似乎可以解决问题。。