Net::hostent(3pm)

πŸ¦‹ Net::hostent(3pm) πŸ¦‹

okay bestie, welcome to the Perl Programmers Reference Guide page for Net::hostent(3pm) β€” it’s literally the by-name interface to Perl’s built-in gethost*() functions. no cap, this one is useful πŸ’–

🌸 NAME 🌸

Net::hostent β€” by-name interface to Perl’s built-in gethost*() functions.

✨ SYNOPSIS ✨

use Net::hostent;

πŸ’… DESCRIPTION πŸ’…

okay so here’s the vibe: this module’s default exports override the core gethostbyname() and gethostbyaddr() functions, replacing them with versions that return "Net::hostent" objects. slay.

Those objects have methods that return the similarly named structure field name from C’s hostent structure from netdb.h. The fields are:

  • name β€” scalar
  • aliases β€” array reference
  • addrtype β€” scalar
  • length β€” scalar
  • addr_list β€” array reference

The aliases and addr_list methods return an array reference, and the rest are scalars. The addr method is equivalent to the zeroth element in the addr_list array reference. 🫢

You can also import all the structure fields directly into your namespace as regular variables using the :FIELDS import tag.

heads up: this still overrides your core functions, bestie.

Access these fields as variables named with a preceding h_. So $host_obj->name() corresponds to $h_name if you import the fields. Array references are available as regular array variables, so for example @{ $host_obj->aliases() } would be simply @h_aliases. πŸ’–

The gethost() function is a simple front-end that forwards a numeric argument to gethostbyaddr() by way of Socket::inet_aton, and the rest to gethostbyname(). iconic.

If you want to access this functionality without the core overrides, pass the use an empty import list, and then access those functions with their full qualified names. On the other hand, the built-ins are still available via the CORE:: pseudo-package. 🌈

πŸŽ€ EXAMPLES πŸŽ€

here’s the example, copied exactly because code is sacred:

        use Net::hostent;
        use Socket;

        @ARGV = ('netscape.com') unless @ARGV;

        for $host ( @ARGV ) {

           unless ($h = gethost($host)) {
               warn "$0: no such host: $host\n";
               next;
           }

           printf "\n%s is %s%s\n",
                   $host,
                   lc($h->name) eq lc($host) ? "" : "*really* ",
                   $h->name;

           print "\taliases are ", join(", ", @{$h->aliases}), "\n"
                       if @{$h->aliases};

           if ( @{$h->addr_list} > 1 ) {
               my $i;
               for $addr ( @{$h->addr_list} ) {
                   printf "\taddr #%d is [%s]\n", $i++, inet_ntoa($addr);
               }
           } else {
               printf "\taddress is [%s]\n", inet_ntoa($h->addr);
           }

           if ($h = gethostbyaddr($h->addr)) {
               if (lc($h->name) ne lc($host)) {
                   printf "\tThat addr reverses to host %s!\n", $h->name;
                   $host = $h->name;
                   redo;
               }
           }
        }

πŸ’€ NOTE πŸ’€

While this class is currently implemented using the Class::Struct module to build a struct-like class, you shouldn’t rely upon this. fr fr, don’t build your whole house on that implementation detail.

πŸ‘‘ AUTHOR πŸ‘‘

Tom Christiansen. shoutout, legend.


and that’s the whole page, bestie 🫢 β€” source/version: perl v5.42.3, date: 2026-11-03. mwah πŸ’‹

πŸ“¦ where this page comes from