What is the difference between Perl's ( or, and ) and ( ||, && ) short-circuit operators?

前端 未结 5 1388
暖寄归人
暖寄归人 2020-11-29 06:44

Which of these subroutines is not like the other?

sub or1 {
    my ($a,$b) = @_;
    return $a || $b;
}

sub or2 {
    my ($a,$b) = @_;
    $a || $b;
}

sub          


        
5条回答
  •  失恋的感觉
    2020-11-29 07:03

    What rules of thumb do you use to decide which construct to use and make sure the code is doing what you think it is doing

    The operator precedence rules.

    || binds tightly, or binds weakly. There is no "rule of thumb".

    If you must have a rule of thumb, how about "only use or when there is no lvalue":

    or:

    open my $fh, '>', 'file' or die "Failed to open file: $!"
    

    ||:

    my $greeting = greet() || $fallback || 'OH HAI';
    

    I agree with MJD about avoiding parens; if you don't know the rules, look them up... but don't write (open(my $fh, '>', 'file')) or (die("Failed to open file: $!")) "just to be sure", please.

提交回复
热议问题