# New Ticket Created by "brian d foy" # Please include the string: [perl #130185] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=130185 >
Here's a short Perl 6 program that declare a `MAIN` subroutine. I should only see output if I execute the program directly: $ cat main.pm6 sub MAIN { say "Called as a program!" } And I see output when I execute the program directly: $ perl6 main.pm6 Called as a program! If I load it as a module, I see no output: $ perl6 -I. -Mmain -e "say 'Hey'" Hey Same if I `use` it from inside the program, I see no output: $ perl6 -I. -e 'use main' But, if I use `require`, I get output: $ perl6 -I. -e 'require <main.pm6>' Called as a program! [Synopsis 06](http://design.perl6.org/S06.html#Declaring_a_MAIN_subroutine) literally says _the compilation unit was directly invoked rather than by being required_. Is there something else going on because `require` works at runtime (although S06 doesn't exclude that)? I get the same behaviour with Rakudo Star 2016.07 and 2016.10. I realize that the Synopses are dated. Absent anything else noting divergence from the design docs or the lack of documentation of the feature in the docs, I think most people are going to assume the original intent. MAIN is very lightly documented in Language/functions.pod6. The verbiage "relevant phasers" should be expanded so a reader knows whats relevant. I didn't find anything in the docs that said MAIN shouldn't run in some circumstances and not others. The docs seem to say that it will always run, but that's not true either. Also asked on Stackoverflow: http://stackoverflow.com/q/40778852/2766176