${^MPEN} had been treated as a synonym of ${^MATCH} due to a missing break;
authorNicholas Clark <nick@ccl4.org>
Thu, 29 Aug 2013 08:47:31 +0000 (10:47 +0200)
committerNicholas Clark <nick@ccl4.org>
Thu, 29 Aug 2013 08:51:18 +0000 (10:51 +0200)
A missing break; in Perl_gv_fetchpvn_flags() meant that the variable ${^MPEN}
had been behaving as a synonym of ${^MATCH}. Adding the break makes ${^MPEN}
behave like all other unused multi-character control character variable.

gv.c
t/op/magic.t

diff --git a/gv.c b/gv.c
index 5702e5e..d3527aa 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1823,6 +1823,7 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
             case '\015':        /* $^MATCH */
                 if (strEQ(name2, "ATCH"))
                    goto magicalize;
+                break;
            case '\017':        /* $^OPEN */
                if (strEQ(name2, "PEN"))
                    goto magicalize;
index 7a929d0..2ad591a 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
     require './test.pl';
-    plan (tests => 180);
+    plan (tests => 184);
 }
 
 # Test that defined() returns true for magic variables created on the fly,
@@ -646,6 +646,13 @@ eval '
 1' or die $@;
 is $stuff[0], $stuff[1], '$^H modifies ${^OPEN} consistently';
 
+# Tests for some non-magic names:
+is ${^MPE}, undef, '${^MPE} starts undefined';
+is ++${^MPE}, 1, '${^MPE} can be incremented';
+
+# This one used to fail due to a missing break;
+is ${^MPEN}, undef, '${^MPEN} starts undefined';
+is ++${^MPEN}, 1, '${^MPEN} can be incremented';
 
 # ^^^^^^^^^ New tests go here ^^^^^^^^^