This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
prefer POSIX::uname() rather than syscalls, which require attempting
[perl5.git] / lib / Sys / Hostname.pm
index 4d93f91..87d1052 100644 (file)
@@ -71,44 +71,44 @@ sub hostname {
   }
   else {  # Unix
 
-    # method 2 - syscall is preferred since it avoids tainting problems
+    # method 2 - use POSIX.pm, prefer the standard library to system calls
     eval {
        local $SIG{__DIE__};
-       {
-           package main;
-           require "syscall.ph";
-       }
+       require POSIX;
+       $host = (POSIX::uname())[1];
+    }
+    # method 3 - otherwise syscall is preferred since it avoids tainting problems
+    || eval {
+       local $SIG{__DIE__};
+       require "syscall.ph";
        $host = "\0" x 65; ## preload scalar
-       syscall(&main::SYS_gethostname, $host, 65) == 0;
+       syscall(&SYS_gethostname, $host, 65) == 0;
     }
 
-    # method 2a - syscall using systeminfo instead of gethostname
+    # method 3a - syscall using systeminfo instead of gethostname
     #           -- needed on systems like Solaris
     || eval {
        local $SIG{__DIE__};
-       {
-           package main;
-           require "sys/syscall.ph";
-           require "sys/systeminfo.ph";
-       }
+       require "sys/syscall.ph";
+       require "sys/systeminfo.ph";
        $host = "\0" x 65; ## preload scalar
-       syscall(&main::SYS_systeminfo, &main::SI_HOSTNAME, $host, 65) != -1;
+       syscall(&SYS_systeminfo, &SI_HOSTNAME, $host, 65) != -1;
     }
 
-    # method 3 - trusty old hostname command
+    # method 4 - trusty old hostname command
     || eval {
        local $SIG{__DIE__};
        local $SIG{CHLD};
        $host = `(hostname) 2>/dev/null`; # bsdish
     }
 
-    # method 4 - sysV uname command (may truncate)
+    # method 5 - sysV uname command (may truncate)
     || eval {
        local $SIG{__DIE__};
        $host = `uname -n 2>/dev/null`; ## sysVish
     }
 
-    # method 5 - Apollo pre-SR10
+    # method 6 - Apollo pre-SR10
     || eval {
        local $SIG{__DIE__};
        ($host,$a,$b,$c,$d)=split(/[:\. ]/,`/com/host`,6);