当我尝试添加“ZZ”+1时,文本从“ZZ”转换为“1”的原因

时间:2015-12-15 22:42:16

标签: string perl concatenation

我只想知道原因如果我使用(。)而不是我得到了结果但+正在进行arhtematic添加但是如何添加ASCII

recode stedu1948(0=2) if M2_2R_A_1<=1948 & 1948<= M2_3R_A_1 | M2_2R_A_2<=1948 & 1948<= M2_3R_A_2 | M2_2R_A_3<=1948 & 1948<= M2_3R_A_3
recode stedu1949(0=2) if M2_2R_A_1<=1949 & 1949<= M2_3R_A_1 | M2_2R_A_2<=1949 & 1949<= M2_3R_A_2 | M2_2R_A_3<=1949 & 1949<= M2_3R_A_3
recode stedu1950(0=2) if M2_2R_A_1<=1950 & 1950<= M2_3R_A_1 | M2_2R_A_2<=1950 & 1950<= M2_3R_A_2 | M2_2R_A_3<=1950 & 1950<= M2_3R_A_3

输出

 my $string = "ZZ";
 my $appendstring = $string+1;
 print $appendstring;

Expeccting

1

2 个答案:

答案 0 :(得分:3)

首先,你的问题非常清楚,你的“例子”(如果你想称之为)与现实不符,但是为了帮助将来偶然发现这个问题的人,我是无论如何要去冒险。

让我们先清楚你的例子:

$ perl -lwe '$x = "ZZ"; print $x + 1;'
Argument "ZZ" isn't numeric in addition (+) at -e line 1.
1

我认为你可能想要的是:

$ perl -lwe '$x = "ZZ"; print ++$x;'
AAA

其原因在perlop中解释:

  

自动增量运算符有一点额外的内置魔力。如果   您递增一个数字变量,或者曾经使用过的变量   在数字上下文中,您获得正常的增量。但是,如果   变量仅在字符串上下文中使用,因为它已设置,并且   具有不是空字符串的值并匹配模式   /^[a-zA-Z]*[0-9]*\z/,增量以字符串形式完成,保留   其范围内的每个字符都带有进位。

编辑:您更新的问题并不比您的原始问题更清晰,但现在我认为您正在询问字符串连接,这意味着您需要string concatenation operator.

$ perl -lwe '$x = "ZZ"; print $x . 1;'
ZZ1

但是,有一种特殊情况,您可以使用带有数字加法运算符的字符串,而不会生成警告:

$ perl -lwe '$x = "0 but true"; print $x + 1;'
1

您还提到了“ASCII添加”,但我不知道那是什么或者您的意思。

答案 1 :(得分:2)

根据this

这是连接的方式

use strict;
use warnings;

my $x = "4T";
my $y = 3;
print $x . $y;    # 4T3

但如果你这样做:

print $x + $y;  # 7
                # Argument "4T" isn't numeric in addition (+) at ...

每当你使用“+”perl尝试将两个值都转换为数字时,如果你提供一个字符串和一个数字或2个字符串,它们将把它们作为0并求它们。 http://ideone.com/0LyEij