oct and hex in glorious 64 bit (with less bugs) (was Re: hex and oct again (was Re...
[p5sagit/p5-mst-13.2.git] / t / op / magic.t
index 7739276..8d9b67b 100755 (executable)
@@ -3,7 +3,7 @@
 BEGIN {
     $| = 1;
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    @INC = '../lib';
     $SIG{__WARN__} = sub { die "Dying on warning: ", @_ };
 }
 
@@ -21,16 +21,20 @@ sub ok {
 }
 
 $Is_MSWin32 = $^O eq 'MSWin32';
+$Is_NetWare = $^O eq 'NetWare';
 $Is_VMS     = $^O eq 'VMS';
 $Is_Dos   = $^O eq 'dos';
 $Is_os2   = $^O eq 'os2';
 $Is_Cygwin   = $^O eq 'cygwin';
-$PERL = ($Is_MSWin32 ? '.\perl' : './perl');
+$Is_MPE     = $^O eq 'mpeix';          
+$PERL = ($Is_MSWin32 ? '.\perl' : ($Is_NetWare ? 'perl' : './perl'));
 
-print "1..35\n";
+print "1..41\n";
 
 eval '$ENV{"FOO"} = "hi there";';      # check that ENV is inited inside eval
-if ($Is_MSWin32) { ok 1, `cmd /x /c set FOO` eq "FOO=hi there\n"; }
+# cmd.exe will echo 'variable=value' but 4nt will echo just the value
+# -- Nikola Knezevic
+if ($Is_MSWin32) { ok 1, `set FOO` =~ /^(FOO=)?hi there$/; }
 else             { ok 1, `echo \$FOO` eq "hi there\n"; }
 
 unlink 'ajslkdfpqjsjfk';
@@ -39,7 +43,7 @@ open(FOO,'ajslkdfpqjsjfk');
 ok 2, $!, $!;
 close FOO; # just mention it, squelch used-only-once
 
-if ($Is_MSWin32 || $Is_Dos) {
+if ($Is_MSWin32 || $Is_NetWare || $Is_Dos || $Is_MPE) {
     ok "3 # skipped",1;
     ok "4 # skipped",1;
 }
@@ -189,16 +193,20 @@ if ($Is_VMS || $Is_Dos) {
 }
 else {
        $PATH = $ENV{PATH};
+       $PDL = $ENV{PERL_DESTRUCT_LEVEL} || 0;
        $ENV{foo} = "bar";
        %ENV = ();
        $ENV{PATH} = $PATH;
-       ok 29, ($Is_MSWin32 ? (`cmd /x /c set foo 2>NUL` eq "")
+       $ENV{PERL_DESTRUCT_LEVEL} = $PDL || 0;
+       ok 29, ($Is_MSWin32 ? (`set foo 2>NUL` eq "")
                                : (`echo \$foo` eq "\n") );
 
-       $ENV{NoNeSuCh} = "foo";
+       $ENV{__NoNeSuCh} = "foo";
        $0 = "bar";
-       ok 30, ($Is_MSWin32 ? (`cmd /x /c set NoNeSuCh` eq "NoNeSuCh=foo\n")
-                                               : (`echo \$NoNeSuCh` eq "foo\n") );
+# cmd.exe will echo 'variable=value' but 4nt will echo just the value
+# -- Nikola Knezevic
+       ok 30, ($Is_MSWin32 ? (`set __NoNeSuCh` =~ /^(__NoNeSuCh=)?foo$/)
+                           : (`echo \$__NoNeSuCh` eq "foo\n") );
 }
 
 {
@@ -209,7 +217,7 @@ else {
 
 # test case-insignificance of %ENV (these tests must be enabled only
 # when perl is compiled with -DENV_IS_CASELESS)
-if ($Is_MSWin32) {
+if ($Is_MSWin32 || $Is_NetWare) {
     %ENV = ();
     $ENV{'Foo'} = 'bar';
     $ENV{'fOo'} = 'baz';
@@ -224,3 +232,28 @@ else {
     ok "34 # skipped: no caseless %ENV support",1;
     ok "35 # skipped: no caseless %ENV support",1;
 }
+
+# Make sure Errno hasn't been prematurely autoloaded
+
+ok 36, !defined %Errno::;
+
+# Test auto-loading of Errno when %! is used
+
+ok 37, scalar eval q{
+   my $errs = %!;
+   defined %Errno::;
+}, $@;
+
+
+# Make sure that Errno loading doesn't clobber $!
+
+undef %Errno::;
+delete $INC{"Errno.pm"};
+
+open(FOO, "nonesuch"); # Generate ENOENT
+my %errs = %{"!"}; # Cause Errno.pm to be loaded at run-time
+ok 38, ${"!"}{ENOENT};
+
+ok 39, $^S == 0;
+eval { ok 40, $^S == 1 };
+ok 41, $^S == 0;