$m = 20; print ++$m + $m++;
####
$m = 20; print noop(++$m) + $m++;
sub noop{ return shift }
##
##
# This is an attempt at emulating ++$m with preInc($m)
sub preInc {
$_[0] = $_[0] + 1; # Increment input argument (the side effect),
return $_[0]; # and return the new, incremented value.
}
# And this is an attempt at emulating $m++ with postInc($m)
sub postInc {
my $temp = shift; # Remember original value,
$_[0] = $_[0] + 1; # increment input argument (the side effect),
return $temp; # and return the old, un-incremented value.
}
my $m = 20;
print preInc($m) + $postInc($m); # This prints 42.
# The final value is $m is 22.
##
##
my $m=20;
print ++$m + $m++; # This prints 43 !
# The final value is $m is still 22.
##
##
# Print values and addresses of passed argument and $m.
sub look {
print "look was passed '" . $_[0] . "' at . \$_[0] . ".\n";
print "while \$m is '" . $m . "' at " . \$m . ".\n";
return $_[0];
}
my $m = 20;
my $p = look(++$m) + look($m++);
print $p;
##
##
sub noop { # do nothing
return shift;
}
my $m=20; print noop(++$m) + $m++; # This prints 42 !
##
##
==== increment weirdness: ++$m + $m++ ==========
m = 20 at 0x80ab23c
p = ++m + m++
*** inc 0x80ab23c : 20 --> 21
m is 21 at 0x80ab23c
*** copy 0x80ab23c --> 0x804c120
m is 21 at 0x80ab23c
*** inc 0x804c120 : 21 --> 22
m is 22 at 0x804c120
*** add : 22 at 0x804c120 + 21 at 0x80ab23c = 43 at 0x80ab11c
m is 22 at 0x804c120
p = 43 at 0x80ab11c