【发布时间】:2017-02-11 18:47:19
【问题描述】:
我有一个混合类型(字符串和数字)的值列表:
my @list = (123, 'foo', 34.5, 'bar', '67baz');
对于该列表中的每个项目,我需要与同样随机类型(字符串或数字)的输入进行比较以执行某些操作:
my $input = 345;
foreach my $elem (@list) {
if ($input == $elem) {
# do something
} else {
# do something else
}
}
比较 (==) 将在两个操作数的类型相同(本例中为数字)时正常工作,但当类型不匹配时会引发警告和/或产生错误结果(对于此代码sn-p,它可以是字符串与数字,或者两者都可以是字符串,因此需要使用eq。
我想就您解决此比较问题的首选方法获得一些意见。或者,如果有一个模块可以根据操作数的类型动态选择(并执行)正确的比较类型。
我知道使用 Scalar::Util 中的 looks_like_number() 等方法来检查您正在使用的值类型,但我认为也许有更好的方法来确定如何进行比较。提前致谢。
【问题讨论】:
-
您是否需要
345来匹配345.0和3.45e2?如果没有,那么您应该一直使用eq。
标签: perl comparison operators