return;
}
+ /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
+ if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
+ Perl_croak_no_modify();
+
if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
if ((flags & SVTYPEMASK) < SVt_PVIV)
sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
return;
}
}
+
+ /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
+ if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
+ Perl_croak_no_modify();
+
if (!(flags & SVp_POK)) {
if ((flags & SVTYPEMASK) < SVt_PVIV)
sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
is $x, 7, '$lex = $lex++ under use integer';
}
+{
+ # RT #126637 - it should refuse to modify globs
+ *GLOB126637 = [];
+
+ eval 'my $y = ++$_ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, '++*GLOB126637';
+ eval 'my $y = --$_ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, '--*GLOB126637';
+ eval 'my $y = $_++ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, '*GLOB126637++';
+ eval 'my $y = $_-- for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, '*GLOB126637--';
+
+ use integer;
+
+ eval 'my $y = ++$_ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, 'use int; ++*GLOB126637';
+ eval 'my $y = --$_ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, 'use int; --*GLOB126637';
+ eval 'my $y = $_++ for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, 'use int; *GLOB126637++';
+ eval 'my $y = $_-- for *GLOB126637';
+ like $@, qr/Modification of a read-only value/, 'use int; *GLOB126637--';
+}
+
done_testing();