如果我有两个变量$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