如果我不知道它们是什么,我如何比较2个变量?

时间:2014-08-29 06:57:05

标签: string perl numbers comparison

如果我在代码流中的某个地方有2个变量$x$y,我真的不知道它们是否包含数字或字符串,我该如何比较它们?
我的意思是我们使用eq等字符串,而数字==<=等 那么大/小等呢?

4 个答案:

答案 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)

如果您不知道您的数据是字符串还是数字,那么将它们视为字符串通常是绝对安全的。如果您希望将数据视为数字,那么您应该验证输入以确保其格式正确。