No, see S06-routines.pod: As with module and class declarations, a sub declared with the C<unit> declarator (and ending in semicolon) is allowed at the outermost file scope if it is the first such declaration, in which case the rest of the file is the body:
unit sub MAIN ($directory, :$verbose, *%other, *@filenames); for @filenames { ... } This form is allowed only for simple subs named C<MAIN> that are intended to be run from the command line. On Sat, Mar 26, 2016 at 7:02 AM Elizabeth Mattijsen via RT < perl6-bugs-follo...@perl.org> wrote: > unit sub ??? > > I thought that unit was only supposed to be followed by a package like > declaration?? > > > > On 26 Mar 2016, at 02:10, Trey Harris (via RT) < > perl6-bugs-follo...@perl.org> wrote: > > > > # New Ticket Created by Trey Harris > > # Please include the string: [perl #127785] > > # in the subject line of all future correspondence about this issue. > > # <URL: https://rt.perl.org/Ticket/Display.html?id=127785 > > > > > > > Example: > > > > % perl6 -e 'sub MAIN ($x where { $^x > 1 } ) { say "big" }' 4 > > big > > % perl6 -e 'sub MAIN ($x where { $^x > 1 } ) { say "big" }' 0 > > Usage: > > -e '...' <x> > > % perl6 -e 'unit sub MAIN ($x where { $^x > 1 } ); say "big"' 4 > > ===SORRY!=== > > Expression needs parens to avoid gobbling block > > at -e:1 > > ------> unit sub MAIN ($x where { $^x > 1 }⏏ ); say "big" > > Missing block (apparently claimed by expression) > > at -e:1 > > ------> unit sub MAIN ($x where { $^x > 1 } );⏏ say "big" > > > > >