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