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β scalaraliasesβ array referenceaddrtypeβ scalarlengthβ scalaraddr_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
- alpine 3.24: perl-doc 5.42.3-r0 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms