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

cir*_*100 26 perl

随着perl -e '$string="a";print ++$string;'我们得到b,
perl -e '$string="b";print --$string;'我们得到的-1.

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


perlop编辑的"自动递减运算符并不神奇"

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

nan*_*dhp 27

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

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

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

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


Cha*_*ens 8

至少有三个原因:

  1. 因为没有任何需要它
  2. 自动递增的魔力被认为是错误的,并且没有理由以相同的错误方式实现自动递减
  3. 自动递增的魔力无法修复,因为p5p不喜欢破坏向后兼容性

另一方面,Perl 6不需要向后兼容性,因此具有更好的自动递增字符串的行为并且还具有自动递减.参见S03规范.


mob*_*mob 7

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

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

  • @TLP:因为那不会跟随'++'的领先.如果你做'perl -e'$ str ="z"; print ++ $ str'`你得到`aa`,它绝对不遵循ASCII表中的`z`. (2认同)