在使用“Smart Match(~~)”测试我的Perl代码的过程中,我遇到了这个问题. 42,42.0,“42.0”,“42”
$var1 = "42"; $var2 = "42.0"; $a = $var1 ~~ $var2;
我得到$a为0;这意味着$var1和$var2不相等.
请解释.
解决方法
智能搭档操作符将“通常做你想要的”.请阅读“不总是”.
42 ~~ 42.0返回true.
42 ~~“42.0”也返回true:将字符串与一个数字进行比较,因此被视为一个数字.同上“42”~~ 42.0.
“42”~~“42.0”返回false:两个参数都是字符串,这些字符串不会比较为“等于”,尽管它们的数字含义.你不会希望Perl将“两个”〜“两点喔”视为真实的.
字符串可以通过添加零来强制为数字解释:
0“42”~~“42.0”再次返回true,因为第一个字符串被强制为42,而第二个字符串被强制为42.
perldoc perlsyn或perldoc perlop
page定义了智能匹配的工作原理:
Object Any invokes ~~ overloading on $object,or falls back: Any Num numeric equality $a == $b Num numish[4] numeric equality $a == $b undef Any undefined !defined($b) Any Any string equality $a eq $b
您可以看到字符串相等是默认值.