伙计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和"你好"或你好做同样的工作为什么他们介绍"".我只是需要解释为什么它会发生在上面的代码上.
在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中,+运算符将其参数视为数字,并尝试将非数字的任何数字转换为数字.在.(点)操作符是用来连接字符串:它会尝试它的操作数,如果他们是不是已经字符串转换为字符串.
如果你把:
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.但它不能用正确的字符串值来做到,比如"好".
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |