2014-08-29 68 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; 
} 
相關問題