my $answer = $choice_1 or $choice_2; # this is  wrong it turns into
(my $answer = $choice_1) # or $choice_2

> there $choice_2 is only evaluated if the $answer got assigned a false
value, and then it gets evaluated in void context, discarding its value.
> Try this in Raku - what does it say? Do you still prefer "or" over "||" ?
my $answer = 0 or 5;

Well, if I were ever to write code like that, I'd not use "or" but ... I
can't recall this coming up.  I was just commenting on Perl having the same
difference in usage of those operators.

On Fri, Jun 30, 2023 at 10:14 AM yary <not....@gmail.com> wrote:

>         @a = @b || @c;              # this is wrong
>         @a = scalar(@b) || @c;      # really meant this
>
> "or" doesn't help with this either
>
>         @a = @b or @c;              # this is wrong
>         (@a = scalar(@b)) or @c;      # really meant this - @c never is
> assigned to @Helen Block <amazingly...@hotmail.com>
>
> the low precedence and/or is was introduced in Perl 5 for this construction
>
> open my $fh '<', $input_filename or die "Could not open $input_filename:
> $!";
>
> At $work I see bugs where people are using "or" "and" in expressions, and
> the part after the expression never gets into the variable they meant it to.
>
> my $answer = $choice_1 or $choice_2; # this is  wrong it turns into
> (my $answer = $choice_1) # or $choice_2
>
> there $choice_2 is only evaluated if the $answer got assigned a false
> value, and then it gets evaluated in void context, discarding its value.
>
> Try this in Raku - what does it say? Do you still prefer "or" over "||" ?
>
> my $answer = 0 or 5;
>
> say $answer;
>
>
> -y
>
>
> On Fri, Jun 30, 2023 at 10:53 AM Andy Bach <andy_b...@wiwb.uscourts.gov>
> wrote:
>
>> 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> 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.
>>
>

-- 

a

Andy Bach,
afb...@gmail.com
608 658-1890 cell
608 261-5738 wk

Reply via email to