Perl中的递增(++)和递减( - )字符串

时间:2011-06-23 17:20:59

标签: perl

使用perl -e '$string="a";print ++$string;',我们得到b
但是perl -e '$string="b";print --$string;'我们得到-1

那么,如果我们可以增加为什么我们不能减少?

EDITED
“自动递减运算符并不是神奇的”perlop

Perl给了我们很多设施,为什么不给这个?这不是批评,但不会对类似的运营商有类似的行为吗?有什么特别的原因吗?

3 个答案:

答案 0 :(得分:27)

perlop(1)解释说这是真的,但没有给出理由:

  

自动增量运算符有一点额外的内置魔力。 [如果适用,并受某些限制,]增量以字符串形式完成,保留其范围内的每个字符,并带有[...]

     

自动递减运算符并不神奇。

你得到-1的原因是因为当它被解释为数字时,“b”变为0,因为它没有前导数字(相反,“4b”变成4)。

答案 1 :(得分:8)

至少有三个原因:

  1. 因为没有任何需要它
  2. 自动递增的魔力被认为是错误的,没有理由以同样的错误方式实现自动递减
  3. 自动递增的魔力无法修复,因为p5p不喜欢打破向后兼容性
  4. 另一方面,Perl 6不需要向后兼容性,因此具有更好的自动递增字符串的行为,并且还具有自动递减功能。请参阅S03 spec

答案 2 :(得分:7)

  

Perl给了我们很多设施,为什么不给这个?

因为不直观的是什么值应该在范围中的“最低”字符之前。 "A" + 1应为"B",而"B" + 1应为"C",这可能是有意义的。因此"B" - 1应为"A"。但"A" - 1应该是什么?