http://www.perlmonks.org?node_id=768049


in reply to Operator Associative in Perl

there is no associative for '++' and '--' operator

There are two major mistakes there.

While Perl doesn't document its operand evaluation order, it always evaluates operands from left to right for left-associative operators and exponentiation (**), and from right to left for assignments operators.

This case is no exception. There are two characteristics (features?) of Perl that cause the result you observe:

So, that means

printf("%d%d%d%d%d\n",$a++,$a--,++$a,--$a,$a);
is basically equivalent to
do { local @_; alias $_[0] = "%d%d%d%d%d\n"; alias $_[1] = $a++; # Returns new value 5, $a=6 alias $_[2] = $a--; # Returns new value 6, $a=5 alias $_[3] = ++$a; # Returns $a (lvalue) $a=6 alias $_[4] = --$a; # Returns $a (lvalue) $a=5 alias $_[5] = $a; # Returns $a (lvalue) $a=5 \&printf; }
When printf gets the values from @_, it sees

When I run the same program in C, I got, 45555. Please explain how it is working?

C leaves the operand evaluation order up to the compiler. Results will vary from compiler to compiler. It looks like yours passed by reference, evaluating from right to left.