我只是在学习 Perl 的比较运算符。我尝试了以下代码:-
$foo=291;
$bar=30;
if ($foo < $bar) {
print "$foo is less than $bar (first)\n";
}
if ($foo lt $bar) {
print "$foo is less than $bar (second)\n";
}
输出是291小于30(秒)。这是否意味着
lt
运算符总是将变量转换为字符串然后比较? Perl 制作的基本原理是什么 lt
运算符的行为与 不同<
运算符(operator)?谢谢,
最佳答案
你的猜测是对的。字母运算符如 lt
将变量作为字符串进行比较,而像 < 这样的符号变量将它们作为数字进行比较。您可以阅读 perlop
man page更多细节。
基本原理是 Perl 中的标量没有类型化,因此如果不告诉它 Perl 将不知道如何比较两个变量。如果它确实猜到了,那么它有时会出错,这将导致不得不做诸如 ' ' + $a < ' ' + $b
之类的事情。强制字符串比较可能比 lt
差.
也就是说,这是一个可怕的陷阱,它可能会捕获每个 Perl 新手,并且在使用较少的 post-modern language 一段时间后回到 Perl 时仍然会捕获我。 .
关于perl - 为什么 '<' 和 'lt' 运算符在 Perl 中返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109517/