Net::protoent - 通过名称访问 Perl 内置的 getproto*() 函数
use Net::protoent;
my $p = getprotobyname(shift || 'tcp') || die "no proto";
printf "proto for %s is %d, aliases are %s\n",
$p->name, $p->proto, "@{$p->aliases}";
use Net::protoent qw(:FIELDS);
getprotobyname(shift || 'tcp') || die "no proto";
print "proto for $p_name is $p_proto, aliases are @p_aliases\n";
此模块的默认导出覆盖了核心函数 getprotoent()、getprotobyname() 和 getnetbyport(),用返回 "Net::protoent" 对象的版本替换它们。它们默认使用 "tcp" 作为第二个参数。此对象具有返回来自 C 语言 netdb.h 中 protoent 结构的同名结构字段的方法;即 name、aliases 和 proto。aliases 方法返回一个数组引用,其余返回标量。
您也可以使用 :FIELDS 导入标签将所有结构字段直接导入到您的命名空间中作为普通变量。(请注意,这仍然会覆盖您的核心函数。)以 p_
开头的变量名访问这些字段。因此,$proto_obj->name()
对应于导入字段后的 $p_name。数组引用可用作普通数组变量,例如 @{ $proto_obj->aliases() }
只是 @p_aliases。
getproto() 函数是一个简单的前端,它将数字参数转发给 getprotobyport(),并将其余参数转发给 getprotobyname()。
要访问此功能而不使用核心覆盖,请将 use
传递给一个空的导入列表,然后使用其完全限定名称访问函数。另一方面,内置函数仍然可以通过 CORE::
伪包访问。
虽然此类目前使用 Class::Struct 模块来构建类似结构的类,但你不应该依赖于此。
Tom Christiansen