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