Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 关于相等运算符的警告_Perl_Operators_Warnings - Fatal编程技术网

Perl 关于相等运算符的警告

Perl 关于相等运算符的警告,perl,operators,warnings,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中是否发生了一些变化,或者一直是这样,第二个例子(
$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.
一直都是这样

在第一个
if
l
被认为是在数字上下文中。但是,
l
不能转换为数字。因此,发出警告


在第二个
if
中,数字
1
被视为在字符串上下文中。因此,在比较之前,数字
1
被转换为字符串
'1'
,因此不会发出警告。

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

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

如果字符串通过了一个
看起来像\u number
测试(可通过访问),则也会以静默方式转换为数字。否则会发出警告,并进行“最佳猜测”近似

my $string = '9';
if ( $string == 9 ) { print "YES" };
将字符串静默地转换为整数9,测试成功并打印
YES

my $string = '9,8';
if ( $string == 9 ) { print "YES" };
引发警告
参数“9,8”在数值等式(=)
中不是数字,将字符串转换为整数9,测试成功并打印

my $string = '9,8';
if ( $string == 9 ) { print "YES" };
据我所知,至少从v5.0开始,它一直是这样的。

您是否故意使用小写“L”?通常很难区分小写字母“L”和1之间的区别。如果你用一个来代替,你会回答你自己的问题

>perl -wE"say '1' == 0;"


>perl -wE"say 1 eq 'a';"


>
如你所见

  • 如果需要一个数字,Perl将在没有警告的情况下将字符串转换为数字
  • 如果需要字符串,Perl将在没有警告的情况下将数字转换为字符串
非常一致

当您尝试将小写L转换为数字时,会收到警告,但这怎么会令人惊讶呢