Autoincrement şi autodecrement cu numere

91

 

Operator

Operaţie efectuată

Exemplu

Rezultat

++op

pre-autoincrement

$a=3;++$a;

print('++$a = ',$a,"\n");

++$a = 4

 

$a=3;$res=++$a;print('$a = ',$a,' $res=++$a: ',$res,"\n");

$a = 4

$res=++$a: 4

op++

post-autoincrement

$a=3;$a++;

print('$a++ = ',$a,"\n");

$a++ = 4

 

$a=3;$res=$a++;print('$a = ',$a,' $res=$a++: ',$res,"\n");

$a = 4

$res=$a++: 3

= +=

atribuire pre-increment

$a=3;$res=$a+=2;

print('$a = ',$a,' $res=$a+=2: ',$res,"\n");

$a = 5

$res=$a+=2: 5

--op

pre-autodecrement

$a=3;--$a;

print('--$a = ',$a,"\n");

--$a = 2

 

$a=3;$res=--$a;

print('$a = ',$a,' $res=--$a : ',$res,"\n");

$a = 2 $res=--$a : 2

op--

post-autodecrement

$a=3;$a--;

print('$a-- = ',$a,"\n");

$a-- = 2

 

$a=3;$res=$a--;

print('$a = ',$a,' $res=$a-- : ',$res,"\n");

$a = 2 $res=$a-- : 3

= -=

atribuire pre-decrement

$a=3;$res=$a-=2;

print('$a = ',$a,' $res=$a-=2: ',$res,"\n");

$a = 1 $res=$a-=2: 1

 

Observaţie:

 

= =+

atribuire post-increment??

$a=3;$res=$a=+2;print('$a = ',$a,' $res=$a=+2: ',$res,"\n");

$a = 2 $res=$a=+2: 2

= =-

atribuire post-decrement??

$a=3;$res=$a=-2;

print('$a = ',$a,' $res=$a=-2: ',$res,"\n");

$a = -2 $res=$a=-2: -2

dar deoarece nu sunt licite operaţiile post-auto-increment şi post-auto-decrement, aceste secvenţe conduc doar la atribuiri multiple.

 

Secvenţă

Motiv

++$var1--;

Nu este permisă în Perl.

$var1 = 10; $var2 = $var1 + ++$var1;

Conduce la diferite rezultate în implementări diferite ale Perl (spre exemplu, rezultatul poate fi 20,21, sau 22).

 

 

Program

Rezultat la consola text

#!/usr/local/bin/perl

$value = 0;

while (++$value <= 5) {

     print("value is now $value\n");

}

print("all done\n");

value is now 1

value is now 2

value is now 3

value is now 4

value is now 5

all done

#!/usr/local/bin/perl

$value = 0;

while ($value++ <= 5) {

     print("value is now $value\n");

}

print("all done\n");

value is now 1

value is now 2

value is now 3

value is now 4

value is now 5

value is now 6

all done

 

© Cornel Mironel Niculae, 2003-2004

13-Nov-2009