perlfunc
root
<P>
Net::servent - by-name interface to Perl's built-in getserv*() functions
<P>
<HR>
<P>
<PRE> use Net::servent;
$s = getservbyname(shift || 'ftp') || die "no service";
printf "port for %s is %s, aliases are %s\n",
$s->name, $s->port, "@{$s->aliases}";
</PRE>
<P>
<PRE> use Net::servent qw(:FIE
<P>
This module's default exports override the core
<CODE>getservent(),</CODE>
<CODE>getservbyname(),</CODE> and
<CODE>getnetbyport()</CODE> functions, replacing them with versions that return ``Net::servent'' objects. They take default second arguments of ``tcp''. This object has methods that return the similarly named structure field name from the C's servent structure from
<EM>netdb.h</EM>; namely name, aliases, port, and proto. The aliases method returns an
array reference, the rest scalars.
<P>
You may also import all the structure fields directly into your namespace as regular variables using the
<FONT SIZE=-1>:FIELDS</FONT> import tag. (Note that this still overrides your core functions.) Access these fields as variables named with a preceding
<CODE>n_</CODE>. Thus, <CODE>$serv_obj->name()</CODE> corresponds to <CODE>$s_name</CODE> if you import the fields. Array
references are available as regular array variables, so for example <CODE>@{ $serv_obj->aliases()
}</CODE> would be simply @s_aliases.
<P>
The
<CODE>getserv()</CODE> function is a simple front-end that forwards a numeric argument to
<CODE>getservbyport(),</CODE> and the rest to
<CODE>getservbyname().</CODE>
<P>
To access this functionality without the core overrides, pass the [perlfunc:use|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 <CODE>CORE::</CODE> pseudo-package.
<P>
<HR>
<H1><A NAME="EXAMPLES">EXAMPLES</A></H1>
<P>
<PRE> use Net::servent qw(:FIELDS);
</PRE>
<P>
<PRE> 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;
}
</PRE>
<P>
<HR>
<H1><A NAME="NOTE">NOTE</A></H1>
<P>
While this class is currently implemented using the Class::Struct module to
build a struct-like class, you shouldn't rely upon this.
<P>
<HR>
<H1><A NAME="AUTHOR">AUTHOR</A></H1>
<P>
Tom Christiansen
<HR>