perl - 关于相等运算符的警告

标签 perl operators warnings

在 Perl 中是否发生了某些变化,或者一直都是这样,第二个 ($number eq 'a') 之类的示例不会引发警告?

#!/usr/bin/env perl
use warnings;
use 5.12.0;

my $string = 'l';
if ($string == 0) {};

my $number = 1;
if ($number eq 'a') {};


# Argument "l" isn't numeric in numeric eq (==) at ./perl.pl line 6.

最佳答案

Perl 将尝试将标量转换为使用它的上下文所需的类型。

从任何标量类型到字符串的转换都是有效的,所以这总是静默完成。

如果字符串通过 looks_like_number 测试(可通过 Scalar::Util 访问),则转换为数字也会静默完成。否则会发出警告,并且无论如何都会进行“最佳猜测”近似。

my $string = '9';
if ( $string == 9 ) { print "YES" };

将字符串静默转换为整数 9,测试成功并打印 YES

my $string = '9,8';
if ( $string == 9 ) { print "YES" };

引发警告Argument "9,8"is not numeric in numeric eq (==),将字符串转换为整数 9,测试成功并且 YES被打印出来了。

据我所知,至少从 v5.0 开始就是这样。

关于perl - 关于相等运算符的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10750399/

相关文章:

python - 浏览 psutil 警告滚动控制台

perl - Bash的“DIE”信号处理程序

C++运算符重载<<与 vector

javascript - 如何检查div元素是否为空

c++ - 是否可以动态绑定(bind) operator>?

python - 每当抛出警告时退出

ios - 无符号表达式的比较 >=0 始终为真

linux - Perl:如何在 Linux 中从 .txt 文件添加用户

perl - 如何在 Perl 中读取外部命令的错误输出?

perl 中的字符串分区(将复杂字符串转换为数组)