“52”和52之间的区别?

时间:2011-06-29 11:02:10

标签: perl perl5

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

$in = "42" ;

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

print $out,;

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

$in ="42";

$out="good52"+32;

print $out ;

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

$in=52;

$in="52"; 

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

$in = "hello";

$in = hello; 

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

4 个答案:

答案 0 :(得分:6)

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

你的第一个例子是:

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

的评估方式如下:

$out = 56 + 32 + 0;

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

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

答案 1 :(得分:5)

如果你把:

use strict;
use warnings;

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

Argument "good" isn't numeric in addition (+) at ...
Argument "good52" isn't numeric in addition (+) at ...

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

答案 2 :(得分:2)

在perl中,数字上下文中的字符串(如使用+运算符时)将转换为数字。

在perl中,您可以使用.(点)运算符连接字符串,而不是+

如果使用+,perl将尝试将所有操作数解释为数字。这适用于数字表示的字符串,否则你得到0.这解释了你所看到的。

  

$in=52;

     

$in="52";

     

做同样的工作“52”不能用作文本​​。因为当我们添加“52”+32时它会给出84.

这里的问题不在于变量定义。一个是字符串,另一个是数字。但是当你在数字表达式(+)中使用字符串时,它将转换为数字。

关于你的第二个问题:

  1. $in = "hello"定义了一个字符串,正如您所期望的那样;

  2. $in = hello;只会将符号hello(但已定义)复制到您的变量上。这实际上不是“严格”的perl,如果你在文件中设置use strict;,perl会抱怨它。

答案 3 :(得分:1)

首先,给this一个读数。

您的问题是+是一个数学加法,对字符串不起作用。如果你使用它,Perl会认为你正在使用数字,因此丢弃任何不是数字的东西。

要连接字符串,请使用.

$str = "blah " . "blah " . "blah";

"52"52之间的差异而言,没有一个。由于Perl中的任何内容(命令,注释等)都不能以数字开头,因此编译器不需要引号就知道该怎么做。