diff options
author | Larry Wall <larry@netlabs.com> | 1994-03-18 00:00:00 +0000 |
---|---|---|
committer | Larry Wall <larry@netlabs.com> | 1994-03-18 00:00:00 +0000 |
commit | 8990e3071044a96302560bbdb5706f3e74cf1bef (patch) | |
tree | 6cf4a58108544204591f25bd2d4f1801d49334b4 /lib/Hostname.pm | |
parent | ed6116ce9b9d13712ea252ee248b0400653db7f9 (diff) | |
download | perl-8990e3071044a96302560bbdb5706f3e74cf1bef.tar.gz |
perl 5.0 alpha 6
[editor's note: cleaned up from the September '94 InfoMagic CD, just
like the last commit]
Diffstat (limited to 'lib/Hostname.pm')
-rw-r--r-- | lib/Hostname.pm | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/Hostname.pm b/lib/Hostname.pm new file mode 100644 index 0000000000..4a59695094 --- /dev/null +++ b/lib/Hostname.pm @@ -0,0 +1,48 @@ +# by David Sundstrom sunds@asictest.sc.ti.com +# Texas Instruments + +package Hostname; + +require Exporter; +@ISA = (Exporter); +@EXPORT = (hostname); + +# +# Try every conceivable way to get hostname. +# + +sub hostname { + # method 1 - we already know it + return $host if defined $host; + + # method 2 - syscall is preferred since it avoids tainting problems + eval { + require "syscall.ph"; + $host = "\0" x 65; ## preload scalar + syscall(&SYS_gethostname, $host, 65) == 0; + } + + # method 3 - sysV uname command + || eval { + $host = `uname -n 2>/dev/null`; ## sysVish + } + + # method 4 - trusty old hostname command + || eval { + $host = `hostname 2>/dev/null`; # bsdish + } + + # method 5 - Apollo pre-SR10 + || eval { + ($host,$a,$b,$c,$d)=split(/[:\. ]/,`/com/host`,6); + } + + # bummer + || die "Cannot get host name of local machine\n"; + + # remove garbage + $host =~ tr/\0\r\n//d; + $host; +} + +1; |