cleanup glob override
Matt S Trout [Thu, 22 Oct 2009 10:08:14 +0000 (06:08 -0400)]
lib/XML/Tags.pm
t/tags.t

index 4acc852..60ab398 100644 (file)
@@ -30,6 +30,8 @@ sub sanitize {
   } @_
 }
 
+sub _glob_glob { eval '\*CORE::GLOBAL::glob' }
+
 sub _find_tags { shift; @_ }
 
 sub _find_target {
@@ -39,21 +41,12 @@ sub _find_target {
   return (caller($level))[0];
 }
 
-{
-  my $setup;
-
-  sub _setup_glob_override {
-    return if $setup;
-    $setup = 1;
-    no warnings 'redefine';
-    *CORE::GLOBAL::glob = sub {
-      for ($_[0]) {
-        # unless it smells like </foo> or <foo bar="baz">
-        return File::Glob::glob($_[0]) unless (/^\/\w+$/ || /^\w+\s+\w+="/);
-      }
-      return \('<'.$_[0].'>');
-    };
-  }
+sub _setup_glob_override {
+  no warnings 'redefine';
+  delete ${CORE::GLOBAL::}{glob};
+  *{_glob_glob()} = sub {
+    return \('<'.$_[0].'>');
+  };
 }
 
 sub _export_tags_into {
@@ -67,6 +60,8 @@ sub _export_tags_into {
       no strict 'refs';
       delete ${"${into}::"}{$tag}
     }
+    delete ${CORE::GLOBAL::}{glob};
+    *{_glob_glob()} = \&File::Glob::glob;
     $IN_SCOPE = 0;
   };
 }
index fa53f80..c58e7e5 100644 (file)
--- a/t/tags.t
+++ b/t/tags.t
@@ -24,6 +24,10 @@ use Test::More qw(no_plan);
     use HTML::Tags;
     <html>, <body id="spoon">, "YAY", </body>, </html>;
   }
+
+  sub globbery {
+    <t/globbery/*>;
+  }
 }
 
 is(
@@ -45,3 +49,9 @@ is(
   '<html><body id="spoon">YAY</body></html>',
   'HTML tags ok'
 );
+
+is(
+  join(', ', Foo::globbery),
+  't/globbery/one, t/globbery/two',
+  'real glob re-installed ok'
+);