Инкремент (++) и декремент (-) строки в Perl - PullRequest
26 голосов
/ 23 июня 2011

С perl -e '$string="a";print ++$string;' получаем b,
но с perl -e '$string="b";print --$string;' мы получаем -1.

Итак, если мы можем увеличить, почему мы не можем уменьшить?

EDITED
«Оператор автоматического декремента не волшебен» perlop

Perl дает нам много возможностей, почему бы не этот? Это не критика, но не ожидается ли подобное поведение для подобных операторов? Есть ли какая-то особая причина?

Ответы [ 3 ]

27 голосов
/ 23 июня 2011

perlop (1) объясняет, что это правда, но не дает обоснования:

Оператор автоинкремента имеет немного дополнительной встроенной магии.[Если применимо и при соблюдении определенных ограничений], приращение выполняется в виде строки, сохраняя каждый символ в пределах его диапазона, с переносом [...]

Оператор автоматического декремента не является магическим.

Причина, по которой вы получаете -1, заключается в том, что при интерпретации как числа «b» превращается в 0, поскольку не имеет начальных цифр (наоборот, «4b» превращается в 4).

8 голосов
/ 25 июня 2011

Существует как минимум три причины:

  1. потому что в этом нет особой необходимости
  2. магия автоинкремента была признана ошибочной, и нет никаких оснований реализовывать автоинкремент таким же неисправным способом
  3. магия автоинкремента не может быть исправлена, потому что p5p не любит нарушать обратную совместимость

Perl 6, с другой стороны, не страдает от необходимости обратной совместимости, и поэтому имеет лучшее поведение для автоинкрементных строк и также имеет автоматическое декрементирование. См. S03 spec .

7 голосов
/ 23 июня 2011

Perl дает нам много возможностей, почему бы не этот?

Потому что не интуитивно понятно, какие значения должны предшествовать «наименьшему» символу в диапазоне. Может иметь смысл, что "A" + 1 должно быть "B", а "B" + 1 должно быть "C". И поэтому "B" - 1 должно быть "A". Но что должно быть "A" - 1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...