* I rewrote the answer to include Net::Domain * I changed the title to get rid of the slashes and use commas instead
* I added X<> entries. I'm not sure I need to give a little answer that many keywords, though. Index: perlfaq9.pod =================================================================== RCS file: /cvs/public/perlfaq/perlfaq9.pod,v retrieving revision 1.24 diff -u -d -r1.24 perlfaq9.pod --- perlfaq9.pod 13 Oct 2005 19:43:13 -0000 1.24 +++ perlfaq9.pod 27 Oct 2005 20:46:57 -0000 @@ -596,29 +596,37 @@ $msg[$msgno] .= $_; END { print @msg[ sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msg) ] } -=head2 How do I find out my hostname/domainname/IP address? +=head2 How do I find out my hostname, domainname, or IP address? +X<hostname, domainname, IP address, host, domain, hostfqdn, inet_ntoa, +gethostbyname, Socket, Net::Domain, Sys::Hostname> -The normal way to find your own hostname is to call the C<`hostname`> -program. While sometimes expedient, this has some problems, such as -not knowing whether you've got the canonical name or not. It's one of -those tradeoffs of convenience versus portability. +(contributed by brian d foy) -The Sys::Hostname module (part of the standard perl distribution) will -give you the hostname after which you can find out the IP address -(assuming you have working DNS) with a gethostbyname() call. +The Net::Domain module, which is part of the standard distribution starting +in perl5.7.3, can get you the fully qualified domain name (FQDN), the host +name, or the domain name. - use Socket; - use Sys::Hostname; - my $host = hostname(); - my $addr = inet_ntoa(scalar gethostbyname($host || 'localhost')); + use Net::Domain qw(hostname hostfqdn hostdomain); + + my $host = hostfqdn(); -Probably the simplest way to learn your DNS domain name is to grok -it out of /etc/resolv.conf, at least under Unix. Of course, this -assumes several things about your resolv.conf configuration, including -that it exists. +The C<Sys::Hostname> module, included in the standard distribution since +perl5.6, can also get the hostname. -(We still need a good DNS domain name-learning method for non-Unix -systems.) + use Sys::Hostname; + + $host = hostname(); + +To get the IP address, you can use the C<gethostbyname> built-in function +to turn the name into a number. To turn that number into the dotted octet +form (a.b.c.d) that most people expect, use the C<inet_ntoa> function +from the <Socket> module, which also comes with perl. + + use Socket; + + my $address = inet_ntoa( + scalar gethostbyname( $host || 'localhost' ) + ); =head2 How do I fetch a news article or the active newsgroups? -- brian d foy, [EMAIL PROTECTED]