perl表达式对语句$ a && =;的含义

mad*_*dia 0 perl

最近我在博客上遇到了这个Perl表达,无法抓住它的目的.

    my $success = 1; 
    $success &&= $insert_handle->execute($first, $last, $department); 
    $success &&= $update_handle->execute($department);
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 9

EXPR1 &&= EXPR2;
Run Code Online (Sandbox Code Playgroud)

是的缩写

EXPR1 = EXPR1 && EXPR2;
Run Code Online (Sandbox Code Playgroud)

(除了EXPR1仅评估一次.*)

提供的代码

my $success = 1; 
$success &&= $insert_handle->execute($first, $last, $department); 
$success &&= $update_handle->execute($department);
Run Code Online (Sandbox Code Playgroud)

也可以写成:

my $success = 0;
if ($insert_handle->execute($first, $last, $department)) {
   if ($update_handle->execute($department)) {
      $success = 1;
   }
}
Run Code Online (Sandbox Code Playgroud)

要么

my $success = $insert_handle->execute($first, $last, $department)
           && $update_handle->execute($department);
Run Code Online (Sandbox Code Playgroud)

* - 如果EXPR1有副作用,这很重要,如果它是一个神奇的变量或左值子,这很可能会发生.

my $x = 3;      # Prints:
print("$x\n");  # 3

sub x() :lvalue { print("x\n"); $x }

x &&= 4;        # x
print("$x\n");  # 4

x = x && 5;     # x x
print("$x\n");  # 5
Run Code Online (Sandbox Code Playgroud)