Dar vieno analitiko svetainė

Petras Kudaras

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