This is something that fa1e92c missed.
if (MARK < SP) {
if (popsub2) {
if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
- if (SvTEMP(TOPs)) {
+ if (lval || SvTEMP(TOPs)) {
*++newsp = SvREFCNT_inc(*SP);
FREETMPS;
sv_2mortal(*newsp);
@INC = '../lib';
require './test.pl';
}
-plan tests=>90;
+plan tests=>91;
sub a : lvalue { my $a = 34; ${\(bless \$a)} } # Return a temporary
sub b : lvalue { ${\shift} }
++bad_inc(bad_id1(bad_id(bad_get_lex)));
cmp_ok($in, '==', 25);
+
+ # Recursive
+ my $r;
+ my $to_modify;
+ $r = sub :lvalue {
+ my $depth = shift//0;
+ if ($depth == 2) { return $to_modify }
+ return &$r($depth+1);
+ };
+ &$r(0) = 7;
+ is $to_modify, 7, 'recursive lvalue sub';
}
{ # bug #23790