ルモーリン
ホーム更新サービス雑談ランドナーコースガイド鉄ゲタ自転車Linuxリンク連絡先

比較と真偽判定は違う

きっかけ

このツイートを見て

コード

文字列比較じゃなさそうなので、もしかすると真偽判定の意図だったのかもしれないと推測、比較と真偽を並べてみました。
#!/usr/bin/perl

use utf8;
use strict;
use warnings;

my @trial = (0, 1, "0.0", "", "perl");

for (@trial) {
	no strict;
	no warnings;
	print "if (0 == \"$_\") ---> ";
	eval <<"EOF";
if (0 == "$_") {
	print "true.\n"; 
} else {
	print "false.\n";
}
EOF
	print "if (\"$_\") ---> ";
	eval <<"EOF";
if ("$_") {
	print "true.\n"; 
} else {
	print "false.\n";
}
EOF
}

exit;

実行結果

WindowsとLinuxで確認しました。
if (0 == "0") ---> true.
if ("0") ---> false.
if (0 == "1") ---> false.
if ("1") ---> true.
if (0 == "0.0") ---> true.
if ("0.0") ---> true.
if (0 == "") ---> true.
if ("") ---> false.
if (0 == "perl") ---> true.
if ("perl") ---> true.