--- ./pp.c~	Fri May 29 07:00:20 1998
+++ ./pp.c	Tue Jun  9 22:57:08 1998
@@ -207,7 +207,8 @@ PP(pp_padany)
 
 PP(pp_rv2gv)
 {
-    djSP; dTOPss;
+  djSP; dTOPss;  tryAMAGICun(to_gv);
+  {
 
     if (SvROK(sv)) {
       wasref:
@@ -248,12 +249,13 @@ PP(pp_rv2gv)
 	save_gp((GV*)sv, !(op->op_flags & OPf_SPECIAL));
     SETs(sv);
     RETURN;
+  }
 }
 
 PP(pp_rv2sv)
 {
-    djSP; dTOPss;
-
+  djSP; dTOPss;  tryAMAGICun(to_gv);
+  {
     if (SvROK(sv)) {
       wasref:
 	sv = SvRV(sv);
@@ -297,6 +299,7 @@ PP(pp_rv2sv)
     }
     SETs(sv);
     RETURN;
+  }
 }
 
 PP(pp_av2arylen)
@@ -348,7 +351,9 @@ PP(pp_pos)
 
 PP(pp_rv2cv)
 {
-    djSP;
+  djSP;  tryAMAGICun(to_cv);
+  {
+
     GV *gv;
     HV *stash;
 
@@ -363,6 +368,7 @@ PP(pp_rv2cv)
 	cv = (CV*)&sv_undef;
     SETs((SV*)cv);
     RETURN;
+  }
 }
 
 PP(pp_prototype)
@@ -604,8 +610,11 @@ PP(pp_study)
     if(unop->op_first && unop->op_first->op_type == OP_PUSHRE) {
 	PMOP *pm = (PMOP *)unop->op_first;
 	SV *rv = sv_newmortal();
+	REGEXP *re = pm->op_pmregexp;
+
 	sv = newSVrv(rv, "Regexp");
-	sv_magic(sv,(SV*)ReREFCNT_inc(pm->op_pmregexp),'r',0,0);
+	sv_setpvn(sv,re->precomp,re->prelen);
+	sv_magic(sv,(SV*)ReREFCNT_inc(re),'r',0,0);
 	RETURNX(PUSHs(rv));
     }
 
