Вот скриптик :
$var = 1;
print $var++ while $var < 5; # Печать $var с инкрементом
Результат: 1234
Суть вопроса: Откуда в результате единица взялась(???), если печаетается (print) $var++ , а не $var.
Не понял простейшей вещи в Perl ($var ++ предпологает ведь собой уже инкреминированную переменную)
Модератор: Модераторы разделов
-
Warderer
- Модератор
- Сообщения: 1056
- Статус: киберпИнгвин на гусеничном ходу
- ОС: Debian unstable
Re: Не понял простейшей вещи в Perl
Подсказка: попробуйте print ++$var. О результате подумайте.
Читаю вслух с выражением маны - $50/ч + стоимость звонка. Настраиваю сервисы за Вас - $100/ч + стоимость выезда и проживания.
И восемь строк матом...(бесплатно)
И восемь строк матом...(бесплатно)
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Не понял простейшей вещи в Perl
Есть разница между выражениями
print $var++
и
print ++$var
В первом случае переменная сначала печатается, а потом увеличивается на еденицу. Во втором -- сначала увеличивается на единицу, потом печатается.
-
Slowly
- Сообщения: 48
- ОС: Mandriva и Windows
Re: Не понял простейшей вещи в Perl
Спасибо за подсказку, как раз тот самый ожидаемый результат. Только начал изучать и уже мне язык начинает быть симпатичен
Но с другой стороны... зачем нужно это? Достаточно задать начальную переменную с нужного числа (а при нуле вообще не обязательно давать значение). И лишь в редких (или не очень редких) случаях начальное значение переменной вычисляется и тогда прежде чем проделывать итерации можно передними выдать её значение а потом уже делать их с инкрементом...
-
Slowly
- Сообщения: 48
- ОС: Mandriva и Windows
Re: Не понял простейшей вещи в Perl
Код: Выделить всё
$var=1;
print $var2=3 unless $var >0;Результат null, как и ожидалось
Код: Выделить всё
$var=1;
print $var2=3 unless $var >1;Результат 3 , как и ожидалось
Код: Выделить всё
$var = 1;
print $var++ unless $var > 5; # Печать $var с инкрементомРезультат: 1, а ожидалось 12345
Код: Выделить всё
$var = 1;
print ++$var unless $var > 5; # Печать $var с инкрементомРезультат: 2, а ожидалось 2345
в чём здесь подвох??
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
-
Slowly
- Сообщения: 48
- ОС: Mandriva и Windows
Re: Не понял простейшей вещи в Perl
Спасибо, Дядя Теодор. Т.е. получается что оператор unless не циклический (хм а ведь дествительно
) ...
Просто с мысли сбил сам пример взятый у Маслова Владимира Викторовича и меня сбила с понталыки именно ++$var по идее там просто должно было быть $var без ++ или всё таки есть смысл в инкрименте?
Просто с мысли сбил сам пример взятый у Маслова Владимира Викторовича и меня сбила с понталыки именно ++$var по идее там просто должно было быть $var без ++ или всё таки есть смысл в инкрименте?
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Не понял простейшей вещи в Perl
Slowly писал(а): ↑29.08.2007 16:19Спасибо, Дядя Теодор. Т.е. получается что оператор unless не циклический (хм а ведь дествительно) ...
Просто с мысли сбил сам пример взятый у Маслова Владимира Викторовича и меня сбила с понталыки именно ++$var по идее там просто должно было быть $var без ++ или всё таки есть смысл в инкрименте?
если пример иллюстрирует инкременты, то понятней было бы так:
[vasiliy@beezir ~]$ perl -e '$var=1; print $var++ ."\n" unless $var>5;print "$var\n";'
1
2
[vasiliy@beezir ~]$ perl -e '$var=1; print ++$var ."\n" unless $var>5;print "$var\n";'
2
2
если иллюстрировалось использование unless, то вроде вы уже разобрались.
-
Slowly
- Сообщения: 48
- ОС: Mandriva и Windows
Re: Не понял простейшей вещи в Perl
diesel писал(а): ↑29.08.2007 16:26Slowly писал(а): ↑29.08.2007 16:19Спасибо, Дядя Теодор. Т.е. получается что оператор unless не циклический (хм а ведь дествительно) ...
Просто с мысли сбил сам пример взятый у Маслова Владимира Викторовича и меня сбила с понталыки именно ++$var по идее там просто должно было быть $var без ++ или всё таки есть смысл в инкрименте?
если пример иллюстрирует инкременты, то понятней было бы так:
[vasiliy@beezir ~]$ perl -e '$var=1; print $var++ ."\n" unless $var>5;print "$var\n";'
1
2
[vasiliy@beezir ~]$ perl -e '$var=1; print ++$var ."\n" unless $var>5;print "$var\n";'
2
2
если иллюстрировалось использование unless, то вроде вы уже разобрались.
иллюстрировалось именно unless и присутсвие как раз инкремета наводило на мысль, что это тоже циклический оператор, хотя написано было то, что он является противопложностью if ...