Hi Paul and Todd,

just a little extra info: the limitation for nameds to come after
positionals is only for declarations of signatures.

Usage of subs/methods as well as capture literals (which you don't use
often, i imagine, so feel free to disregard) allow you to mix nameds and
positionals freely; it will handle named parameters that are put between
positionals as if they were after the positional parameters.

> sub abcdefg($b, $f, $g, :$a, :$c, :$e) { say $a, $b, $c, $e }   
&abcdefg
> abcdefg(1, a => 5, 2, c => 99, 100, e => 1024)        
51991024

Most cases where I wanted named parameters early in the call was when
there was something big in the call, for example if a sub takes a block
and a few options, i prefer to put the options before the block, so they
are visible at a glance rather than after scrolling. I suppose this
mirrors how regex modifiers (like :ignorecase / :i, :global, etc) have
been moved to the front of regexes.

Hope that's interesting
  - Timo

On 10/02/2020 07:48, Paul Procacci wrote:
> Named parameters must come after all positional parameters.
> Your example subroutine is invalid for this reason, while the
> following would be fine:
>
> sub abcdefg( $b, $f, $g, :$a, :$c, :$e)
>
> abcdefg("position1", "position2", "position3", :e("named_e"),
> :a("named_a"), :c("named_c"));
>
>
>
> On Sun, Feb 9, 2020 at 6:24 PM ToddAndMargo via perl6-users
> <perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:
>
>     On 2020-02-09 14:53, Paul Procacci wrote:
>     > subchdir(IO() $path, :$d=True, :$r, :$w, :$x-->IO::Path:D)
>
>     Hi Paul,
>
>     What I wanted to see is how something liek
>
>     sub abcdefg( :$a, $b, :$c, :$e, $f, $g )
>
>     would be called
>
>     -T
>
>
>
> -- 
> __________________
>
> :(){ :|:& };:

Reply via email to