如果我在代码流中的某个地方有2个变量$x
和$y
,我真的不知道它们是否包含数字或字符串,我该如何比较它们?
我的意思是我们使用eq
等字符串,而数字==
或<=
等
那么大/小等呢?
答案 0 :(得分:1)
如果你不知道它们是什么,你怎么能问它们是否相同?
具体来说,你认为这两者是一样的吗?
"1"
"1.0"
在数字上,它们都代表一个,但它们包含不同的字符,因此它们是不同的。
答案 1 :(得分:1)
字符串的大/小可以用cmp完成。
if ( ( $a cmp $b ) == 0 ) { print "a == b\n" }
elsif ( ( $a cmp $b ) < 0 ) { print "a < b\n" }
elsif ( ( $a cmp $b ) > 0 ) { print "a > b\n" }
重申以上评论&#34; 123&#34; cmp&#34; 56&#34;会给予少于。
所以你可能想做这样的事情:
if ( compareEm($a, $b) == 0 ) { print "a == b\n" }
elsif ( compareEm($a, $b) < 0 ) { print "a < b\n" }
elsif ( compareEm($a, $b) > 0 ) { print "a > b\n" }
sub compareEm {
my ( $a, $b ) = @_;
my $isnum = qr/(?=.)(?!^\.$)^[\-\+]?\d*\.?\d*$/o;
return ( $a =~ $isnum && $b =~ $isnum ) ? $a <=> $b : $a cmp $b;
}
答案 2 :(得分:0)
使用eq
,它始终有效......
答案 3 :(得分:0)
如果您不知道您的数据是字符串还是数字,那么将它们视为字符串通常是绝对安全的。如果您希望将数据视为数字,那么您应该验证输入以确保其格式正确。