Perl 字符串和 < & >运营商
对于比较字符串,通常使用 lt、gt 等。
当我使用数字运算符比较字符串时,perl 到底做了什么? (<, >)
my $str1 = 'Joe';
my $str2 = 'flight';
我猜当执行 $str1 gt $str2
perl 时会比较 ASCII 代码(?),但是当我执行以下操作时会发生什么:
$str1 > $str2
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先你得到一个警告:
然后perl将这些字符串转换为整数,这样它们就变成0,然后比较就完成了。
First of all you got a warning :
Then perl cast these strings to integer so they become 0 then the comparison is done.
对于 Perl 来说,10 就是 10,无论它存储为字符串 (PV)、有符号整型 (IV)、无符号整型 (UV) 还是浮点数 (NV)。
<
、>
和==
比较其操作数的数值。那么不是数字的东西的数值为零*,因此flight
的数值为零(有警告),Joe
的数值为零(有警告),所以它们是平等的。另一方面,字符串
10
的数值是 10,字符串2
的数值是 2,因此* — 对象可以覆盖它,并且数值引用的地址是引用值的地址。
To Perl, 10 is 10 whether it's stored as a string (PV), a signed int (IV), an unsigned int (UV) or a floating point number (NV).
<
,>
and==
compare the numerical values of their operands. Then numerical value of stuff that isn't a number is zero*, so the numerical value offlight
is zero (with a warning) and the numerical value ofJoe
is zero (with a warning), so they are equal.On the other hand, the numerical value of string
10
is 10, and the numerical value of string2
is 2, so* — Objects can override this, and the numerical value of a reference is the address of the referenced value.
perl 在比较之前将字符串转换为数字。
您的两个示例字符串都转换为零。
它们根据“整理顺序”(通常按字母顺序)进行比较,
就像在电话簿中一样对字符串进行排序。
是假的:
perl converts the strings to numbers before comparing them.
Both of your example strings convert to zero.
They are compared according to the "collating sequence" (nominally alphabetical),
as if the strings were sorted as in a phonebook.
is false: