Avoid a redundant copy in pp_glob
authorFather Chrysostomos <sprout@cpan.org>
Sat, 19 Nov 2011 08:30:14 +0000 (00:30 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 19 Nov 2011 08:30:14 +0000 (00:30 -0800)
Most of the time, the argument to glob() won’t be tied, so we don’t
need to copy it.  So only copy it if it is gmagical.

pp_sys.c

index 3458177..958a133 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -355,9 +355,9 @@ PP(pp_glob)
     dVAR;
     OP *result;
     dSP;
-    /* make a copy of the pattern, to ensure that magic is called once
-     * and only once */
-    TOPm1s = sv_2mortal(newSVsv(TOPm1s));
+    /* make a copy of the pattern if it is gmagical, to ensure that magic
+     * is called once and only once */
+    if (SvGMAGICAL(TOPm1s)) TOPm1s = sv_2mortal(newSVsv(TOPm1s));
 
     tryAMAGICunTARGET(iter_amg, -1, (PL_op->op_flags & OPf_SPECIAL));