note
BrowserUk
<p>Fun.
<p>The reason that using your preInc() sub changes the result is because the value it returns is a <i>copy</i> of $m's value at the end of the call to the sub.
<p>By contrast, the value of $m used by the + operator in the non-sub statement is the value of $m at the point after both the subexpressions involved in the + operation have been evaluated.
<p>I assume that the order of the evaluation is a result of converting the expressions to their reverse polish form. Clear as mud, but this is (roughly) equivalent
<code>
$m=20;
$r = \$m;
print ${ $$r += 1; $r } + ${ my $t=$$r; $$r += 1; \$t };
43
</code>
<p>At least, it produces the same result and is close enough for my mental processes to get a notional handle on the mechanism.
<div class="pmsig"><div class="pmsig-171588">
<hr />
<font size=1 >
<div>Examine what is said, not who speaks.</div>
"Efficiency is intelligent laziness." -David Dunham<br />
"Think for yourself!" - [Abigail-II|Abigail] <br />
"Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - [tachyon]<br />
</font>
</div></div>
369247
369247