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

3 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"; 
}
Run Code Online (Sandbox Code Playgroud)

输出291小于30(秒).这是否意味着lt运算符总是将变量转换为字符串然后进行比较?Perl使lt运算符的行为与运算符的不同之处是<什么?

谢谢,

Dav*_*ebb 12

你的猜测是正确的.字母操作符比如lt将变量作为字符串进行比较,而将符号表示为<将它们作为数字进行比较.您可以阅读perlop手册页以获取更多详细信息.

理由是Perl中的标量没有输入,所以没有你告诉它Perl不会知道如何比较两个变量.如果它确实猜到了那么它有时会出错,这将导致必须做一些事情,比如' ' + $a < ' ' + $b强制字符串比较,这可能比这更糟糕lt.

也就是说这是一个可怕的陷阱,可能会让Perl的每个人都抓到新手,并且在使用较少的后现代语言一段时间后回到Perl时仍然会抓住我.


Gre*_*ill 6

由于Perl是松散类型的,并且值可以随时在字符串和整数之间静默转换,因此Perl需要两种不同类型的比较运算符来区分整数比较(<)和字符串比较(lt).如果你只有一个操作员,你会怎么说出差异?