我只想知道原因如果我使用(。)而不是我得到了结果但+正在进行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
答案 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