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.