論理演算子の「and」と「&&」の違い
投稿:2018-01-23
動作に違いが出るように頑張ったけれど、そもそもこんなコード書かないよ(大笑い)
#!/usr/bin/perl -w
use utf8;
use warnings;
use strict;
use open IO => ":utf8";
use Encode::Locale;
binmode STDOUT, ":encoding(console_out)";
$| = 1;
my @param = (0, 123);
alphabet(@param);
symbol(@param);
@param = (10, 123);
alphabet(@param);
symbol(@param);
exit;
sub alphabet {
my ($a, $b) = @_;
$b = $a and print "$b\n";
print "b == $b\n";
}
sub symbol {
my ($a, $b) = @_;
$b = $a && print "$b\n";
print "b == $b\n";
}
WindowsとCentOSで確認しました。
左の項が偽の場合は右の項を評価しないので1行目と2行目は同じに見えます。 けれど真の場合は左の項の範囲が違うのでandと&&で動作が変わります。
左の項が偽の場合は右の項を評価しないので1行目と2行目は同じに見えます。 けれど真の場合は左の項の範囲が違うのでandと&&で動作が変わります。
b == 0 ←左の項は「$b = $a」 b == 0 ←左の項は「$a」 10 ←左の項「$b = $a」を評価(10が$bに入る)、それから右の項「print」を評価して表示 b == 10 123 ←左の項「$a」を評価して、それから右の項「print」を評価して表示 b == 1 ←「print」の戻り値が代入されている
