比較演算子の使い分け
投稿:2018-08-25
比較演算子を使い分けずに値を型変換(?)するようなツイートを見かけてこんなツイートをしました。
比較演算子には大別して文字列比較と数値比較の2種類があります。
演算子が文字列と見るか数値と見るかの違いです。
- <
- lt
#!/usr/bin/env perl -w use utf8; use strict; use warnings; use Data::Dumper; use Encode::Argv; use Encode::Locale; use open IO => ":utf8"; binmode STDIN, ":encoding(console_in)"; binmode STDOUT, ":encoding(console_out)"; binmode STDERR, ":encoding(console_out)"; $| = 1; my ($a, $b, $c, $d) = (1, "1.0", "a", "b"); print "$a < $b → " . ($a < $b ? "true" : "false") . "\n"; print "$a lt $b → " . ($a lt $b ? "true" : "false") . "\n"; print "$c < $d → " . ($c < $d ? "true" : "false") . "\n"; print "$c lt $d → " . ($c lt $d ? "true" : "false") . "\n"; exit;
WindowsとCentOSで同じ結果になりました。
文字列で「1.0」を比較すると後ろの「.0」がある分、より大きな値の文字列となります。
数値では「a」と「b」は同じなので<は偽になります。
1 < 1.0 → false 1 lt 1.0 → true Argument "b" isn't numeric in numeric lt (<) at sample_42.pl line 23. Argument "a" isn't numeric in numeric lt (<) at sample_42.pl line 23. a < b → false a lt b → true