【问题标题】:Reason for the text converting from "ZZ" to "1" when i try to add "ZZ"+1当我尝试添加“ZZ”+1 时文本从“ZZ”转换为“1”的原因
【发布时间】:2016-03-21 22:19:18
【问题描述】:

我只是想知道如果我使用 (.) 的原因,我得到了结果,但 + 正在做 arhtematic 加法,但是 ASCII 加法是如何进行的

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

输出

1

期待

ZZ1

【问题讨论】:

  • 我不相信该输出对应于该代码。
  • @mob 抱歉,我没有检查

标签: string perl concatenation


【解决方案1】:

根据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

【讨论】:

  • 谢谢你的回答。我尝试使用 (.) 连接,但我想知道后面发生了什么
  • 如果您阅读了我提供的链接,它指出每当您使用“+”号时,它都会尝试进行数字加法,尝试将两个值都转换为数字。
  • 根据 perl fiddle,输出也是 1 而不是 ZZa。
【解决方案2】:

首先,您的问题非常不清楚,并且您的“示例”(如果您想这样称呼它)与现实不符,但是为了帮助将来遇到此问题的任何人,我无论如何都要冒险回答。

让我们先弄清楚你的例子:

$ 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 加法”,但我不知道那是什么或您的意思。

【讨论】:

  • 非常感谢@Matt Jacob 的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多