summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-03-17 13:38:34 +0000
committerNicholas Clark <nick@ccl4.org>2006-03-17 13:38:34 +0000
commitd83f0a8247ea7458731c8479d8cbf3ee1fa81243 (patch)
treec7b22a3a0257894aa9ec9c70af39e396f7212d7b /pp_ctl.c
parentb4a415570dc258ddaff4bbab5c0f83c1af645b29 (diff)
downloadperl-d83f0a8247ea7458731c8479d8cbf3ee1fa81243.tar.gz
sv_find() returning false, followed by sv_magic() to add the magic,
followed immediately by sv_find() to find it, is somewhat wasteful. So use sv_magicext(). (All cases are also correct w.r.t. SvREADONLY()) p4raw-id: //depot/perl@27533
Diffstat (limited to 'pp_ctl.c')
-rw-r--r--pp_ctl.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 4b0703b861..87a383d259 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -284,8 +284,12 @@ PP(pp_substcont)
if (SvTYPE(sv) < SVt_PVMG)
SvUPGRADE(sv, SVt_PVMG);
if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
- sv_magic(sv, NULL, PERL_MAGIC_regex_global, NULL, 0);
- mg = mg_find(sv, PERL_MAGIC_regex_global);
+#ifdef PERL_OLD_COPY_ON_WRITE
+ if (SvIsCOW(lsv))
+ sv_force_normal_flags(sv, 0);
+#endif
+ mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
+ NULL, 0);
}
i = m - orig;
if (DO_UTF8(sv))