"52"和52之间的区别?

cod*_*ody 1 perl perl5

伙计perl并不是那么容易我认为它是如此令人困惑的事情.我只是转移到操作员,我写了一些代码,但我无法弄清楚编译器如何处理它们.

$in = "42" ;

$out = "56"+32+"good";

print $out,;
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是88,好消息在哪里?现在让我们看看另一个.

$in ="42";

$out="good52"+32;

print $out ;
Run Code Online (Sandbox Code Playgroud)

对于这些,输出是32.问题是我们刚存储在$ out中的好处在哪里,以及""为什么编译器只是将值打印为32而不是剩余的文本之间的值52.另一个问题是

$in=52;

$in="52"; 
Run Code Online (Sandbox Code Playgroud)

做同样的工作"52"不作为文本工作.因为当我们添加"52"+32时它会给出84.发生了什么和

$in = "hello";

$in = hello; 
Run Code Online (Sandbox Code Playgroud)

两者都做同样的工作?或者他们是否有所不同,但如果我打印然后给出相同的输出.它只是吃掉了我的大脑.它是如此令人困惑,因为当"52"或52和"你好"或你好做同样的工作为什么他们介绍"".我只是需要解释为什么它会发生在上面的代码上.

odr*_*drm 6

在Perl中,+是一个数字运算符.它试图将其两个操作数解释为数字.51是数字51. "51"是一个包含两位数字的字符串,+操作员尝试将字符串转换为数字,即51,并在计算中使用它."hello"是一个包含五个字母的字符串,当+运算符尝试将其解释为数字时,它等于0(零).

你的第一个例子是:

$out = "56"+32+"good";
Run Code Online (Sandbox Code Playgroud)

评估如下:

$out = 56 + 32 + 0;
Run Code Online (Sandbox Code Playgroud)

print然后,您将其转换为输出中的字符串,并产生88.

在perl中,+运算符将其参数视为数字,并尝试将非数字的任何数字转换为数字.在.(点)操作符是用来连接字符串:它会尝试它的操作数,如果他们是不是已经字符串转换为字符串.

  • @cody:它的方法很简单 - 如果字符串以数字字符(数字/小数点/前导`-`)开头,那就是数值.如果它以其他任何东西开头,则数值为0.因此"-4.2bravo"的数值为-4.2,而"bravo-4.2"的数值为0(因为它以"b"开头,这是非数字). (2认同)

TLP*_*TLP 5

如果你把:

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

在脚本的顶部,您会收到警告,例如:

Argument "good" isn't numeric in addition (+) at ...
Argument "good52" isn't numeric in addition (+) at ...
Run Code Online (Sandbox Code Playgroud)

如果可能,Perl会自动将字符串值重新指定给numeric.所以"42"+ 10实际上变成了52.但它不能用正确的字符串值来做到,比如"好".