0

最近、私はブログでこのPerl式に出くわしましたが、目的をつかむことができませんでした。

    my $success = 1; 
    $success &&= $insert_handle->execute($first, $last, $department); 
    $success &&= $update_handle->execute($department);
4

3 に答える 3

9
EXPR1 &&= EXPR2;

の略です

EXPR1 = EXPR1 && EXPR2;

(一度だけ評価される場合を除きEXPR1ます。*)

提供されたコード

my $success = 1; 
$success &&= $insert_handle->execute($first, $last, $department); 
$success &&= $update_handle->execute($department);

次のように書くこともできます:

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

また

my $success = $insert_handle->execute($first, $last, $department)
           && $update_handle->execute($department);

* —これ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
于 2012-09-25T19:07:11.493 に答える
3

それは長い言い方です。

 my $success =
     $insert_handle->execute($first, $last, $department)
     && $update_handle->execute($department);
于 2012-09-25T19:10:36.717 に答える
1

かもしれない:-

my $success = 1; 
$success = $success && $insert_handle->execute($first, $last, $department); 
$success = $success && $update_handle->execute($department);

に似ている : -

a += b  
// is equivalent to
a = a + b
于 2012-09-25T19:05:53.220 に答える