o->op_seq = PL_op_seqmax++;
break;
- case OP_CONCAT:
- if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
- if (o->op_next->op_private & OPpTARGET_MY) {
- if (o->op_flags & OPf_STACKED) /* chained concats */
- goto ignore_optimization;
- else {
- /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
- o->op_targ = o->op_next->op_targ;
- o->op_next->op_targ = 0;
- o->op_private |= OPpTARGET_MY;
- }
- }
- op_null(o->op_next);
- }
- ignore_optimization:
- o->op_seq = PL_op_seqmax++;
- break;
case OP_STUB:
if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
o->op_seq = PL_op_seqmax++;
0x0002251e, /* i_add */
0x0002252e, /* subtract */
0x0002251e, /* i_subtract */
- 0x0002250e, /* concat */
+ 0x0002240e, /* concat */
0x0000290e, /* stringify */
0x0002250e, /* left_shift */
0x0002250e, /* right_shift */
i_add integer addition (+) ck_null ifsT2 S S
subtract subtraction (-) ck_null IfsT2 S S
i_subtract integer subtraction (-) ck_null ifsT2 S S
-concat concatenation (.) or string ck_concat fsT2 S S
+concat concatenation (.) or string ck_concat fst2 S S
stringify string ck_fun fsT@ S
left_shift left bitshift (<<) ck_bitop fsT2 S S
return $ok;
}
-print "1..19\n";
+print "1..20\n";
($a, $b, $c) = qw(foo bar);
my $a; ($a .= 5) . 6;
ok($a == 5, '($a .= 5) . 6 - present since 5.000');
}
+
+{
+ # [perl #24508] optree construction bug
+ sub strfoo { "x" }
+ my ($x, $y);
+ $y = ($x = '' . strfoo()) . "y";
+ ok( "$x,$y" eq "x,xy", 'figures out correct target' );
+}