Skip to content

Instantly share code, notes, and snippets.

@theorbtwo
Created December 9, 2010 23:27

Revisions

  1. theorbtwo created this gist Dec 9, 2010.
    39 changes: 39 additions & 0 deletions gistfile1.perl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    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;