这是一个简短的Perl 6程序,它声明了一个MAIN子程序.如果我直接执行程序,我应该只看到输出:
$ cat main.pm6
sub MAIN { say "Called as a program!" }
Run Code Online (Sandbox Code Playgroud)
当我直接执行程序时,我看到输出:
$ perl6 main.pm6
Called as a program!
Run Code Online (Sandbox Code Playgroud)
如果我将其作为模块加载,我看不到输出:
$ perl6 -I. -Mmain -e "say 'Hey'"
Hey
Run Code Online (Sandbox Code Playgroud)
如果我use在程序内部相同,我看不到输出:
$ perl6 -I. -e 'use main'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用require,我得到输出:
$ perl6 -I. -e 'require <main.pm6>'
Called as a program!
Run Code Online (Sandbox Code Playgroud)
概要06字面上说,编译单元是直接调用而不是被要求.是否有其他事情发生,因为require在运行时工作(虽然S06不排除它)?
我对Rakudo Star 2016.07和2016.10也有同样的行为.