I  always took [1]
 As alternatives to "&&" and "||" when used for control flow, Perl provides
    the "and" and "or" operators (see below). The short-circuit behavior is
    identical. The precedence of "and" and "or" is much lower, however, so
    that you can safely use them after a list operator without the need for
    parentheses

to suggest that and and or are the better ones to use and && or || should be 
used only if they're specifically needed.  Which has always been "never" for me.

a

[1]
perldoc perlop
   The "||", "//" and "&&" operators return the last value evaluated (unlike
    C's "||" and "&&", which return 0 or 1). Thus, a reasonably portable way
    to find out the home directory might be:

        $home =  $ENV{HOME}
              // $ENV{LOGDIR}
              // (getpwuid($<))[7]
              // die "You're homeless!\n";

    In particular, this means that you shouldn't use this for selecting
    between two aggregates for assignment:

        @a = @b || @c;              # this is wrong
        @a = scalar(@b) || @c;      # really meant this
        @a = @b ? @b : @c;          # this works fine, though

    As alternatives to "&&" and "||" when used for control flow, Perl provides
    the "and" and "or" operators (see below). The short-circuit behavior is
    identical. The precedence of "and" and "or" is much lower, however, so
    that you can safely use them after a list operator without the need for
    parentheses:

        unlink "alpha", "beta", "gamma"
                or gripe(), next LINE;

    With the C-style operators that would have been written like this:

        unlink("alpha", "beta", "gamma")
                || (gripe(), next LINE);

    It would be even more readable to write that this way:

        unless(unlink("alpha", "beta", "gamma")) {
            gripe();
            next LINE;
        }

    Using "or" for assignment is unlikely to do what you want; see below.

________________________________
From: yary <not....@gmail.com>
Sent: Friday, June 30, 2023 8:45 AM
To: Richard Hainsworth <rnhainswo...@gmail.com>
Cc: perl6-users@perl.org <perl6-users@perl.org>
Subject: Re: A question on AND

CAUTION - EXTERNAL:

Most of Richard's parting suggestions I understand & agree with, but not this: 
" why are you using '&&' and not 'and' "

My habit (from Perl 5 days) is to use && || for expressions, and reserve "and" 
"or" for "do this if assignment/function call without parens succeeds/fails" – 
is there a refinement on that distinction in Raku which I should pay attention 
to?

-y


On Fri, Jun 30, 2023 at 5:40 AM Richard Hainsworth 
<rnhainswo...@gmail.com<mailto:rnhainswo...@gmail.com>> wrote:

I tried this and it worked without any problem.

Here's the whole program:

use v6.d;
say @*ARGS.raku;
if @*ARGS.elems > 0  &&  "@*ARGS[0]".lc eq "debug"  {
    say 'got'
}
and at the terminal:

$ raku todd-test.raku debug --debug=50
["debug", "--debug=50"]
got


FWIW
why are you quoting ARGS? The .lc coerces to string anyway.
why are you using && and not 'and'
why are you not using a sub MAIN with an optional --debug
eg. sub MAIN( @args, Bool :$debug=False) {
#stuff
if $debug { ... }




On 30/06/2023 06:06, ToddAndMargo via perl6-users wrote:
if @*ARGS.elems > 0  &&  "@*ARGS[0]".lc eq "debug"  {...}
CAUTION - EXTERNAL EMAIL: This email originated outside the Judiciary. Exercise 
caution when opening attachments or clicking on links.

Reply via email to