Net::servent(3pm)

okay so bestie, welcome to Net::servent(3pm) β€” yes, that's the title β€” and this little icon is straight out of the Perl Programmers Reference Guide ✨. Buckle up, we're talking service lookup realness. πŸ’…

🌸 NAME 🌸

Net::servent β€” the by-name interface to Perl's built-in getserv*() functions, periodt. πŸ’–

✨ SYNOPSIS ✨

First vibe:

        use Net::servent;
        my $s = getservbyname(shift || 'ftp') || die "no service";
        printf "port for %s is %s, aliases are %s\n",
           $s->name, $s->port, "@{$s->aliases}";

Then the :FIELDS version, lowkey iconic:

        use Net::servent qw(:FIELDS);
        getservbyname(shift || 'ftp') || die "no service";
        print "port for $s_name is $s_port, aliases are @s_aliases\n";

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so here's the tea: this module's default exports override the core getservent(), getservbyname(), and getnetbyport() functions β€” not me being dramatic, it's literally right there πŸ’…. They replace them with versions that return "Net::servent" objects. And they take default second arguments of "tcp". Slay.

This object has methods that return the similarly named structure field name from the C's servent structure from netdb.h; namely:

  • name
  • aliases β€” returns an array reference
  • port
  • proto

The aliases method returns an array reference, and the rest are scalars. No cap. ✨

You may also import all the structure fields directly into your namespace as regular variables using the :FIELDS import tag. (Note that this still overrides your core functions.) Access these fields as variables named with a preceding "s_". Thus, "$serv_obj->name()" corresponds to $s_name if you import the fields. Array references are available as regular array variables, so for example "@{$serv_obj->aliases()}" would be simply @s_aliases.

The getserv() function is a simple front-end that forwards a numeric argument to getservbyport(), and the rest to getservbyname(). It's giving helpful little shortcut energy. 🫢

To access this functionality without the core overrides, pass the "use" an empty import list, and then access function functions with their full qualified names. On the other hand, the built-ins are still available via the "CORE::" pseudo-package. iykyk. πŸ’œ

πŸ“ EXAMPLES πŸ“

Here's a whole example that ate and left no crumbs:

        use Net::servent qw(:FIELDS);

        while (@ARGV) {
            my ($service, $proto) = ((split m!/!, shift), 'tcp');
            my $valet = getserv($service, $proto);
            unless ($valet) {
                warn "$0: No service: $service/$proto\n"
                next;
            }
            printf "service $service/$proto is port %d\n", $valet->port;
            print "alias are @s_aliases\n" if @s_aliases;
        }

πŸ™ˆ NOTE πŸ™ˆ

⚠️ note bestie: While this class is currently implemented using the Class::Struct module to build a struct-like class, you shouldn't rely upon this. It's giving internal detail, not a promise. πŸ™ˆ

πŸ‘‘ AUTHOR πŸ‘‘

Tom Christiansen wrote this. Iconic. πŸ‘‘


and that's the whole page! πŸ’– this beauty is from perl v5.42.3, dated 2026-11-03, and it's the Net::servent(3pm) page in the Perl Programmers Reference Guide. byeee, go look up some services bestie! πŸŒˆπŸ’…

πŸ“¦ where this page comes from