Ah... yes. That would make it a bug. Sorry.
It doesn't seem to be the ternary operator causing the havoc, or pattern matching though:
$,=", ";
my $i;
print $i++, $i, $i++, $i, $i++, $i;
prints
0, 3, 1, 3, 2, 3
Using Dump, we can see that the optimizer is assuming that $1 must be constant for the length of time it takes to evaluate the list:
use Data::Dump::Streamer;
my $i;
print Dump \($i++, $i, $i++, $i, $i++, $i);
prints
$SCALAR1 = \do { my $v = 0 };
$SCALAR2 = \do { my $v = 3 };
$SCALAR3 = \do { my $v = 1 };
$SCALAR4 = $SCALAR2;
$SCALAR5 = \do { my $v = 2 };
$SCALAR6 = $SCALAR2;
The autoincrement is also not a necessary ingredient:
use Data::Dump::Streamer;
print Dump \("x"=~/(x)/, $1, "y"=~/(y)/, $1, "z"=~/(z)/, $1);
prints
$SCALAR1 = \do { my $v = 'x' };
$SCALAR2 = \do { my $v = 'z' };
$SCALAR3 = \do { my $v = 'y' };
$SCALAR4 = $SCALAR2;
$SCALAR5 = \do { my $v = 'z' };
$SCALAR6 = $SCALAR2;
|