Re: A question on AND

[email protected] (Andy Bach)
Newsgroups perl.perl6.users
Message-ID <SA1PR09MB82405743F007FF44DA2936C9C02AA@SA1PR09MB8240.namprd09.prod.outlook.com>
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 <[email protected]>
Sent: Friday, June 30, 2023 8:45 AM
To: Richard Hainsworth <[email protected]>
Cc: [email protected] <[email protected]>
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 <[email protected]<mailto:[email protected]>> 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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.