
инкремент-декремент
Очевидно, инкремент ++ и декремент -- работает как и раньше. Попробуем
| | #!/usr/bin/perl6
my $num=10;
say ++$num;
say $num;
say $num++;
say $num;
say --$num;
say $num;
say $num--;
say $num; | | 11
11
11
12
11
11
11
10 |
Вот и хорошо. А что если в одной строке несколько декрементов или инкрементов одной переменной?| | #!/usr/bin/perl6
my $num=10;
say $num,' ',++$num,' ',$num,' ',++$num,' ',$num,' ',++$num,' ',$num,' ',++$num,' ',$num;
say $num; | | 14 11 14 12 14 13 14 14 14
14 |
То есть все возможные инкременты в строке сначала подсчитались, потом уже сработала say. N.B. Лучше избегать использования в одной строке сразу двух или более инкрементов-декрементов одной переменной. Во избежание сюрпризов. # mutatio postrema: 14 Aug 2010
Интересно удостовериться как обрабатываются несколько минусов-плюсов подряд.
| | #!/usr/bin/perl6
my $num=4 + -5;
$num.say; | | -1 |
Sic... А если так:| | #!/usr/bin/perl6
# my $num=4 + --5; # приводит к ошибке. компиллятор считает
# что надо сделать декремент пятерке, а она read only
my $num=4 + -(-5);
$num.say; | | 9 |
Хм. А без пробелов?| | #!/usr/bin/perl6
my $num=4+-5;
$num.say;
$num=4+-(-5);
$num.say; | | -1
9 |
Без неожиданностей. А если немного позапутывать код?| | #!/usr/bin/perl6
my ($a,$b)=40,55;
# my $c=$a+++++$b; # error, "Cannot modify readonly value"
my $c=$a++ + ++$b;
"$a $b $c".say; | | 41 56 96 |
96 это 40 + 56, это понятно. Жаль, что нельзя поставить пять плюсов. Было бы красиво... Ну и напоследок проверим:| | #!/usr/bin/perl6
my $a=100;
my $b=$a+++-5;
"$a $b".say; | | 101 95 |
N.B. Не надо жадничать пробелы. # mutatio postrema: 22 Jan 2011
|