perl - 为什么 '<' 和 'lt' 运算符在 Perl 中返回不同的结果?

标签 perl comparison

我只是在学习 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/

相关文章:

regex - 如何在 Perl 替换运算符的替换端使用变量?

perl - 是否有可能在 EV 回调中使用 Perl 进行 longjump 之类的操作?

perl - 在do循环中替代 "last"

Python:比较不同深度的字典对的工具?

c# - 什么是用于比较引用类型的两个实例的 "Best Practice"?

frameworks - Clojure Web 框架的比较

php - nuSoap 还是 Zend Soap?

perl - 在 Perl 中,检查 json 解码的 boolean 值

arrays - 在 Perl 中反转数组的每个标量

c++ - 有效地找到最小值和最大值