Galvosūkiai su ++
Vat Perlmonksuose radau tokį įdomų
klausimėlį . Štai kodo gabaliukas, pabandykit pasakyt ką jis spausdins
(jo nepaleidę):
$a = $b = $c = 1;
$a = $a++ + $a++;
$b = $b++ + $b ;
$c = $c + $c++;
print "$a $b $c";
Na, aš teisingai atsakiau ką spausdins tik du ;) (na, jei PHP
taisyklėmis – tai visus tris). Atrodo kad Perlas čia skiriasi nuo
PHP. PHP spausdina kaip ir tikėjausi 3 3 2
, tuo tarpu
Perlas – 3 3 3
. Paaiškinti KAIP tai įvyksta
ant Perlo nesunku, bet KODĖL yra sunkiau (dokumentacija rašo, kad
tokiais atvejais rezutatas gali būti neapibrėžtas – tai yra vieną
kartą būti vienoks, o kitą kitoks)
moxliukas@www:~$ perl -MO=Deparse,-p
$a = $b = $c = 1;
$a = $a++ + $a++;
$b = $b++ + $b ;
$c = $c + $c++;
print "$a $b $c
";
^D
($a = ($b = ($c = 1)));
($a = (($a++) + ($a++)));
($b = (($b++) + $b));
($c = ($c + ($c++)));
print("$a $b $c
");
- syntax OK