Skip to content

Instantly share code, notes, and snippets.

@theorbtwo
Created December 9, 2010 23:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theorbtwo/735503 to your computer and use it in GitHub Desktop.
Save theorbtwo/735503 to your computer and use it in GitHub Desktop.
diff --git a/op.c b/op.c
index 09b1bbc..c46730d 100644
--- a/op.c
+++ b/op.c
@@ -9517,8 +9517,23 @@ Perl_rpeep(pTHX_ register OP *o)
o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
| OPpOUR_INTRO);
o->op_next = o->op_next->op_next;
- o->op_type = OP_GVSV;
- o->op_ppaddr = PL_ppaddr[OP_GVSV];
+
+ if (GvNAMELEN(cSVOPx_sv(o)) == 1
+ && (
+ GvNAME(cSVOPx_sv(o))[0] == '\017' || /* $^O */
+ GvNAME(cSVOPx_sv(o))[0] == '\026' || /* $^V */
+ GvNAME(cSVOPx_sv(o))[0] == ']' || /* $] */
+ 0
+ )) {
+ SvREFCNT_inc(GvSVn(cGVOPx_gv(o)));
+ SvREFCNT_dec(cGVOPx_gv(o));
+ cSVOPx_sv(o) = GvSVn(cGVOPx_gv(o));
+ o->op_type = OP_CONST;
+ o->op_ppaddr = PL_ppaddr[OP_CONST];
+ } else {
+ o->op_type = OP_GVSV;
+ o->op_ppaddr = PL_ppaddr[OP_GVSV];
+ }
}
}
else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
@@ -9545,7 +9560,7 @@ Perl_rpeep(pTHX_ register OP *o)
}
break;
-
+
{
OP *fop;
OP *sop;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment