--- /dev/null
+#include <EXTERN.h>
+#include <perl.h>
+#include <XSUB.h>
+
+int
+my_runops(pTHX)
+{
+ HV* regexp_hv = get_hv( "B::C::REGEXP", 0 );
+ SV* key = newSViv( 0 );
+
+ do {
+ PERL_ASYNC_CHECK();
+
+ if( PL_op->op_type == OP_QR ) {
+ PMOP* op;
+ REGEXP* rx = PM_GETRE( (PMOP*)PL_op );
+ SV* rv = newSViv( 0 );
+
+ New( 671, op, 1, PMOP );
+ Copy( PL_op, op, 1, PMOP );
+ /* we need just the flags */
+ op->op_next = NULL;
+ op->op_sibling = NULL;
+ op->op_first = NULL;
+ op->op_last = NULL;
+ op->op_pmreplroot = NULL;
+ op->op_pmreplstart = NULL;
+ op->op_pmnext = NULL;
+#ifdef USE_ITHREADS
+ op->op_pmoffset = 0;
+#else
+ op->op_pmregexp = 0;
+#endif
+
+ sv_setiv( key, PTR2IV( rx ) );
+ sv_setref_iv( rv, "B::PMOP", PTR2IV( op ) );
+
+ hv_store_ent( regexp_hv, key, rv, 0 );
+ }
+ } while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX)));
+
+ SvREFCNT_dec( key );
+
+ TAINT_NOT;
+ return 0;
+}
+
+MODULE=B__C PACKAGE=B::C
+
+BOOT:
+ PL_runops = my_runops;