有时我不想要多个文件,特别是如果我正在玩一个想法,我想保持一个可以在以后变成某种东西的漂亮结构.我想做这样的事情:
module Foo {
sub foo ( Int:D $number ) is export {
say "In Foo";
}
}
foo( 137 );
Run Code Online (Sandbox Code Playgroud)
运行这个,我得到一个编译错误(我认为对于动态语言有点奇怪):
===SORRY!=== Error while compiling /Users/brian/Desktop/multi.pl
Undeclared routine:
foo used at line 9
Run Code Online (Sandbox Code Playgroud)
阅读Perl 6"模块"文档,我没有看到任何方法来执行此操作,因为各种动词想要查看特定文件.
子程序声明是词法,因此&foo在模块的主体外部是不可见的.您需要在主线代码中添加import语句以使其可见:
module Foo {
sub foo ( Int:D $number ) is export { ... }
}
import Foo;
foo( 137 );
Run Code Online (Sandbox Code Playgroud)
只是为了记录,您还可以&foo在主线中手动声明一个变量并从模块中分配给它:
my &foo;
module Foo {
sub foo ( Int:D $number ) { ... } # no export necessary
&OUTER::foo = &foo;
}
foo( 137 );
Run Code Online (Sandbox Code Playgroud)