Add testcase for clobbering globs when trying to restore them.
Florian Ragwitz [Tue, 30 Jun 2009 05:10:50 +0000 (07:10 +0200)]
Courtesy of Ben Morrows.

t/06-other-types.t [new file with mode: 0644]
t/lib/OtherTypes.pm [new file with mode: 0644]

diff --git a/t/06-other-types.t b/t/06-other-types.t
new file mode 100644 (file)
index 0000000..f6254ec
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+use Test::More tests => 17;
+
+our $pvio;
+
+use_ok('OtherTypes');
+
+# Since we use use_ok, this is effectively 'compile time'.
+
+ok( defined *OtherTypes::foo{SCALAR},
+    "SCALAR slot intact at compile time" );
+ok( defined *OtherTypes::foo{ARRAY},
+    "ARRAY slot intact at compile time" );
+ok( defined *OtherTypes::foo{HASH},
+    "HASH slot intact at compile time" );
+ok( defined *OtherTypes::foo{IO},
+    "IO slot intact at compile time" );
+
+is( $OtherTypes::foo, 23,
+    "SCALAR slot correct at compile time" );
+is( $OtherTypes::foo[0], "bar",
+    "ARRAY slot correct at compile time" );
+is( $OtherTypes::foo{mouse}, "trap",
+    "HASH slot correct at compile time" );
+is( *OtherTypes::foo{IO}, $pvio,
+    "IO slot correct at compile time" );
+
+eval q{
+    ok( defined *OtherTypes::foo{SCALAR},
+        "SCALAR slot intact at run time" );
+    ok( defined *OtherTypes::foo{ARRAY},
+        "ARRAY slot intact at run time" );
+    ok( defined *OtherTypes::foo{HASH},
+        "HASH slot intact at run time" );
+    ok( defined *OtherTypes::foo{IO},
+        "IO slot intact at run time" );
+
+    is( $OtherTypes::foo, 23,
+        "SCALAR slot correct at run time" );
+    is( $OtherTypes::foo[0], "bar",
+        "ARRAY slot correct at run time" );
+    is( $OtherTypes::foo{mouse}, "trap",
+        "HASH slot correct at run time" );
+    is( *OtherTypes::foo{IO}, $pvio,
+        "IO slot correct at run time" );
+};
diff --git a/t/lib/OtherTypes.pm b/t/lib/OtherTypes.pm
new file mode 100644 (file)
index 0000000..66b8873
--- /dev/null
@@ -0,0 +1,20 @@
+package OtherTypes;
+
+our $foo = 23;
+our @foo = "bar";
+our %foo = (mouse => "trap");
+{
+    no warnings;
+    # perl warns about the bareword foo. If we use *foo instead the
+    # warning goes away, but the *foo{IO} slot doesn't get autoviv'd at
+    # compile time.
+    open foo, "<", $0;
+}
+
+BEGIN { $main::pvio = *foo{IO} }
+
+sub foo { 1 }
+
+use namespace::clean;
+
+1;