perl6.suОсвоим perl6 к 2015 году!

инкремент-декремент


       Очевидно, инкремент ++ и декремент -- работает как и раньше. Попробуем
    
#!/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

   числа, инкремент-декремент      charta situs       nota XII, nota XLVII   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011