小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

Perlでの『|=』と『||=』の違い

『|=』は、ビット演算子と代入演算子の組み合わせで、ビット演算子でビット単位の論理和を行い、代入演算子で代入します。
『||=』は、論理和演算子と代入演算子の組み合わせで、論理和演算子で左オペランドが偽のときだけ、右オペランドを評価(代入演算子で代入)し、左オペランドが1回でも真になると右オペランドを評価しない。

use strict;
use warnings;
my $str_data;
my $scalar;

   $str_data = "";  # 空文字列は偽
   $scalar = "A";
   $str_data ||= $scalar;
   $scalar = "B";
   $str_data ||= $scalar;
   print $str_data, "\n"; # Aを表示

   $str_data = "";
   $scalar = "A";
   $str_data |= $scalar;
   $scalar = "B";
   $str_data |= $scalar;
   print $str_data, "\n"; # Cを表示
# (Aは0x41の01000001, Bは0x42の01000010なので、ORすると01000011となりCとなる)

ビット演算子は、滅多に使う機会がないと思いますが、論理和演算子は使える場面が結構あります。
ですので、論理和演算子の特性を覚えておくとなにかと吉です。


にほんブログ村 IT技術ブログ Tipsへ