Works (𝐑𝐚𝐤𝐮𝐝𝐨™ v2021.06):

admin@mbook:~$ raku Luca_Ferrari2.p6
Usage:
  Luca_Ferrari2.p6 [--dir=<Str where { ... }>]
admin@mbook:~$ raku Luca_Ferrari2.p6 --dir=foo
foo

But...warning "Specify the directory [$dir]" isn't printing when
`--dir=foo` is omitted.

HTH, Bill.

On Tue, Apr 12, 2022 at 1:23 AM Luca Ferrari <fluca1...@gmail.com> wrote:

> On Tue, Apr 12, 2022 at 10:15 AM Luca Ferrari <fluca1...@gmail.com> wrote:
> >
> > Hello all,
> > given this simple program:
> >
> > sub MAIN( Str :$dir where { .so && .IO.d // warn "Specify the
> > directory [$dir]" } ) {
> >     say $dir;
> > }
> >
>
> Shame on me: it works if I omit the topic and substitute it with the
> explicit variable, thus:
>
> sub MAIN( Str :$dir where { $dir.so && $dir.IO.d // warn "Specify the
> directory [$dir]" } ) {
>     say $dir;
> }
>
> The only thing that I find in the documentation at
> <https://docs.raku.org/type/Signature#index-entry-where_clause> is:
> "The code in where clauses has some limitations: anything that
> produces side-effects (e.g., printing output, pulling from an
> iterator, or increasing a state variable) is not supported and may
> produce surprising results if used. Also, the code of the where clause
> may run more than once for a single typecheck in some
> implementations."
>
> Is there a better approach to spurting warning messages when a
> parameter is not correct (without dealing with USAGE() and friends)?
>
> Thanks,
> Luca
>

Reply via email to