內容

名稱

Net::servent - Perl 內建 getserv*() 函式的依名稱介面

語法

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}";

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

說明

此模組的預設匯出會覆寫核心 getservent()、getservbyname() 和 getnetbyport() 函式,並以傳回「Net::servent」物件的版本取代它們。它們的預設第二個參數為「tcp」。此物件有方法可傳回 netdb.h 中 C 的 servent 結構中同名的結構欄位名稱;即名稱、別名、埠和通訊協定。別名方法傳回陣列參考,其餘為純量。

您也可以使用 :FIELDS 匯入標籤將所有結構欄位直接匯入您的命名空間中,作為常規變數。(請注意,這仍然會覆寫您的核心函式。)使用以 s_ 開頭命名的變數來存取這些欄位。因此,如果您匯入欄位,則 $serv_obj->name() 會對應到 $s_name。陣列參考可用作常規陣列變數,例如 @{ $serv_obj->aliases()} 會變成 @s_aliases。

getserv() 函式是一個簡單的前端,它將數字引數轉發到 getservbyport(),並將其餘部分轉發到 getservbyname()。

若要存取此功能而不覆寫核心,請傳遞 use 一個空的匯入清單,然後使用其完整限定名稱存取函式函式。另一方面,內建函式仍然可透過 CORE:: 偽套件使用。

範例

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;
}

注意事項

雖然此類別目前使用 Class::Struct 模組來建置類似結構的類別,但您不應依賴於此。

作者

Tom Christiansen