Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Perl


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Perl

Выпуск № 50
от 05.06.2006, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 145, Экспертов: 15
В номере:Вопросов: 1, Ответов: 1


Вопрос № 44769: Здравствуйте, уважаемые эксперты! Вопрос немного странный... Пусть есть некий кусок кода. Почему в программе он выдает одно, а если его запустить отдельно - другое? См. приложение. В программе со значением ничего не делается, просто оно...

Вопрос № 44.769
Здравствуйте, уважаемые эксперты!
Вопрос немного странный...
Пусть есть некий кусок кода. Почему в программе он выдает одно, а если его запустить отдельно - другое? См. приложение.
В программе со значением ничего не делается, просто оно присваивается от одной переменной к другой. Да и после первого вывода видно, что 0 еще сохраняется. Почему после операции "++", когда ноль должен остаться, он исчезает?
Спасибо!

Приложение:

Отправлен: 31.05.2006, 14:06
Вопрос задала: lupus campestris (статус: Профессионал)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Лучников Ю.В.
Здравствуйте, lupus campestris!

Все дело в "волшебном" поведении операции инкремента...
Операция увеличения ++, примененная к переменной, содержащей строки определенного вида, выполняется несколько необычно:

Если строка состоит только из латинских букв, то возвращаемым значением операции инкремента будет строка, в которой последняя буква заменена на следующую по порядку алфавита, причем строчная заменяется на строчную, заглавная на заглавную. Аналогично операция ведет себя, если строка состоит из цифр - последняя цифра увеличивается на единицу. Если в "последнем разряде" стоит '9', 'z', 'Z' - то есть крайнее значение последовательности цифрбукв, то оно сбрасывается в начальное ('0', 'a', 'A') и производится инкремент предпоследнего разряда и т.д.

Пример:
$str = 'abc';
$str++; - результат $str = 'abd';

$str = '05';
$str++; - результат $str = '06';

$str = 'a99';
$str++; - результат $str = 'b00';

Операция декремента (--) таким свойством не обладает!

У вас же во втором случае инициализация идет строковым представлением числа ($MonthCurStart='05'). Соответственно операция инкремента себя ведет как описано выше (отсюда ноль не убирается).

А в первом случае видимо скаляр $MonthCurStop в результате каких либо манипуляций теряет строковый контекст - поэтому инкремент уже применяется к числу (ведущий ноль теряется).
Успехов;)
Ответ отправил: Лучников Ю.В. (статус: *Мастер-Эксперт)
Россия, Киров
WWW: нЧат - Наш Чат!
ICQ: 176308580
----
Ответ отправлен: 31.05.2006, 16:57
Оценка за ответ: 4


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное