Allow negative indexing in recursive patterns
[p5sagit/p5-mst-13.2.git] / t / op / magic.t
index 154a3cc..294beb0 100755 (executable)
@@ -36,7 +36,7 @@ sub skip {
     return 1;
 }
 
-print "1..56\n";
+print "1..58\n";
 
 $Is_MSWin32  = $^O eq 'MSWin32';
 $Is_NetWare  = $^O eq 'NetWare';
@@ -49,10 +49,11 @@ $Is_MPE      = $^O eq 'mpeix';
 $Is_miniperl = $ENV{PERL_CORE_MINITEST};
 $Is_BeOS     = $^O eq 'beos';
 
-$PERL = ($Is_NetWare            ? 'perl'   :
-        ($Is_MacOS || $Is_VMS) ? $^X      :
-        $Is_MSWin32            ? '.\perl' :
-        './perl');
+$PERL = $ENV{PERL}
+    || ($Is_NetWare           ? 'perl'   :
+       ($Is_MacOS || $Is_VMS) ? $^X      :
+       $Is_MSWin32            ? '.\perl' :
+       './perl');
 
 eval '$ENV{"FOO"} = "hi there";';      # check that ENV is inited inside eval
 # cmd.exe will echo 'variable=value' but 4nt will echo just the value
@@ -256,7 +257,7 @@ EOF
     s{\\}{/}g;
     ok((($Is_MSWin32 || $Is_os2) ? uc($_) eq uc($s1) : $_ eq $s1), " :$_:!=:$s1:");
     $_ = `$perl $script`;
-    s/\.exe//i if $Is_Dos or $Is_os2;
+    s/\.exe//i if $Is_Dos or $Is_os2 or $Is_Cygwin;
     s{./$perl}{$perl} if $Is_BeOS; # revert BeOS execvp() side-effect
     s{\\}{/}g;
     ok((($Is_MSWin32 || $Is_os2) ? uc($_) eq uc($s1) : $_ eq $s1), " :$_:!=:$s1: after `$perl $script`");
@@ -268,6 +269,14 @@ ok $] >= 5.00319, $];
 ok $^O;
 ok $^T > 850000000, $^T;
 
+# Test change 25062 is working
+my $orig_osname = $^O;
+{
+local $^I = '.bak';
+ok($^O eq $orig_osname, 'Assigning $^I does not clobber $^O');
+}
+$^O = $orig_osname;
+
 if ($Is_VMS || $Is_Dos || $Is_MacOS) {
     skip("%ENV manipulations fail or aren't safe on $^O") for 1..4;
 }
@@ -428,13 +437,22 @@ ok "@+" eq "10 1 6 10";
 }
 
 # Test for bug [perl #36434]
-{
+if (!$Is_VMS) {
     local @ISA;
     local %ENV;
     eval { push @ISA, __PACKAGE__ };
-    ok( $@ eq '', 'Push a constant on a magic array', '#36434' );
+    ok( $@ eq '', 'Push a constant on a magic array');
     $@ and print "# $@";
     eval { %ENV = (PATH => __PACKAGE__) };
-    ok( $@ eq '', 'Assign a constant to a magic hash', '#36434' );
+    ok( $@ eq '', 'Assign a constant to a magic hash');
     $@ and print "# $@";
+    eval { my %h = qw(A B); %ENV = (PATH => (keys %h)[0]) };
+    ok( $@ eq '', 'Assign a shared key to a magic hash');
+    $@ and print "# $@";
+}
+else {
+# Can not do this test on VMS, EPOC, and SYMBIAN according to comments
+# in mg.c/Perl_magic_clear_all_env()
+#
+    skip('Can\'t make assignment to \%ENV on this system') for 1..3;
 }