It was meant to check whether it was inside the replacement part of
s///e, but it only checked that it was inside s///e. PL_lex_repl is
set on both sides, but is only equal to PL_linestr on the rhs.
#!./perl
-print "1..72\n";
+print "1..73\n";
$x = 'x';
eval "s//3}->{3/e";
print "not " unless $@;
print "ok 72 - s//3}->{3/e\n";
+
+$_ = "not ok 73";
+$x{3} = "not ";
+eval 's/${\%x}{3}//e';
+print "$_ - s//\${\\%x}{3}/e\n";
#endif
return yylex(); /* ignore fake brackets */
}
- if (PL_lex_inwhat == OP_SUBST && PL_lex_repl
+ if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
&& SvEVALED(PL_lex_repl))
PL_lex_state = LEX_INTERPEND;
else if (*s == '-' && s[1] == '>')