如何在与程序相同的文件中声明和使用Perl 6模块?

时间:2016-01-09 01:21:47

标签: module perl6

有时候我不想要多个文件,特别是如果我想要保持一个可以在以后变成某种东西的漂亮结构的想法。我想做这样的事情:

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

阅读the Perl 6 "Modules" documentation,我认为没有办法做到这一点,因为各种动词想要查看特定文件。

1 个答案:

答案 0 :(得分:7)

子程序声明是词法,因此&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 );