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

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";
}