2014-08-29 73 views

回答

0

使用eq,它总是工作...

+0

怎么样大于/小于等? – Jim 2014-08-29 07:03:22

+0

字符串的“更大/更小”是什么意思?一些词典顺序? – pwes 2014-08-29 07:04:54

+0

在Perl中没有类型,因此您可以将所有标量作为字符串处理。由于这个原因,更大/更小的值也会起作用,但'lt','gt'等操作符会将它们作为字符串进行比较。这意味着“123”将比“56”少。 – glezmen 2014-08-29 07:05:32

0

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

1

如果你不知道他们是什么,你怎么能问他们是否一样?

具体来说,你认为这两个是一样的吗?

"1" 
"1.0" 

数字上,它们都代表一个,但是它们含有不同的字符,所以不同。

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" } 

要重申“123”cmp“56”以上的评论将给予小于。

所以,你可能想要做这样的事情:

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; 
} 
相关问题