如果我有兩個變量$x
和$y
在代碼流的某處,我真的不知道它們是否包含數字或字符串,我該如何比較它們?
我的意思是我們使用eq
等字符串,而數字==
或<=
等
還有更多/更少等?如果我不知道它們是什麼,我該如何比較2個變量?
0
A
回答
0
使用eq
,它總是工作...
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;
}
相關問題
- 1. 如何將變量與未定義的比較,如果我不知道它們是否存在?
- 2. 我如何知道我的變量是什麼類型?
- 3. 什麼是System.Reflection.RuntimePropertyInfo,我該如何比較它?
- 4. 如何比較2個xml文件知道它是否相同
- 5. 它說'Fixnum與零比較失敗',我不知道爲什麼
- 6. 如果我有兩個時間段,我怎麼知道它們是否重疊?
- 7. 如果我們知道android
- 8. 如果我知道一個類,我怎麼知道它來自哪個jar?
- 9. 我想比較2個數組。爲什麼它不起作用?
- 10. 我該如何聲明變量,比較它們,然後在函數內部使用它們
- 11. 如何比較兩個字符串,如果它們不相等
- 12. 如何比較兩個對象,但不知道它們的實際類型
- 13. 什麼是箭頭,我該如何使用它們?
- 14. 什麼是ARC限制,我該如何刪除它們?
- 15. DTL - 如果沒有聲明比較是真的......不知道爲什麼
- 16. 如果我們不能釋放它,malloc的行爲是什麼
- 17. 如果siftDown比siftUp更好,爲什麼我們擁有它?
- 18. javafx如何比較2種顏色並知道它們是相同還是不同?
- 19. 我不知道爲什麼我的代碼是錯的?它有什麼不對?
- 20. Perl參考。我們怎麼知道它是一個?
- 21. 如果一種語言沒有「比特」比較,我該如何模擬它?
- 22. expires頭?我如何實施它們,它們是什麼?
- 23. 看看這個代碼,讓我知道如果有什麼我可以改變
- 24. PHP - 如果我知道SESSION_ID,如何獲取會話變量
- 25. 如果我知道它的字符串名稱,如何爲變量設置值?
- 26. 給定一個包,我怎麼知道它的artifactId應該是什麼?
- 27. 蘋果拒絕了我,不知道爲什麼,或者如何解決它
- 28. 行動的結果是什麼,我該如何使用它?
- 29. 我不明白如何在可可中使用代表,但我知道它們是什麼
- 30. 我不知道如何傳遞我的變量在android
怎麼樣大於/小於等? – Jim 2014-08-29 07:03:22
字符串的「更大/更小」是什麼意思?一些詞典順序? – pwes 2014-08-29 07:04:54
在Perl中沒有類型,因此您可以將所有標量作爲字符串處理。由於這個原因,更大/更小的值也會起作用,但'lt','gt'等操作符會將它們作爲字符串進行比較。這意味着「123」將比「56」少。 – glezmen 2014-08-29 07:05:32