Doesn't that rely on undefined behaviour though? Auto increment and Auto decrement:
Note that just as in C, Perl doesn't define when the variable is incremented or decremented. You just know it will be done sometime before or after the value is returned.
ie: the doc doesn't rule out your code being interpreted as
eval { --$i; $b[ $i ] = $a[ $i ] + $a[ $i ] } while $i;
For example:
$b[ $i ] = [ $i, --$i ] while $i; builds a list of identical pairs.</c>
Correct and efficient might be:
$#b = $#a-1; # Allocate a big enough array
$i = @b;
$b[ $i ] = $a[ $i ] - $a[ $i+1 ] while $i--;