Queste routine compiono le stesse funzioni delle loro controparti nella libreria di sistema. In un contesto di lista, restituiscono i valori dalle varie routine di get [ottenere, NdT], come segue:
($nome,$passwd,$uid,$gid,
$quota,$commento,$gcos,$dir,$shell,$scadenza) = getpw*
($nome,$passwd,$gid,$members) = getgr*
($nome,$alias,$tipoind,$lungh,@indirizzi) = gethost*
($nome,$alias,$tipoind,$net) = getnet*
($nome,$alias,$proto) = getproto*
($nome,$alias,$porta,$proto) = getserv*
(Se la voce non esiste, otterrete una lista nulla).
L'esatto significato del campo $gcos varia ma di solito esso contiene il vero nome dell'utente (rispetto al nome del login) e altre informazioni pertinente all'utente. Fate attenzione, comunque, che su molti sistemi gli utenti sono in grado di cambiare queste informazioni e dunque ciò non può essere verificato e dunque $gcos è un dato potenzialmente dannoso (taint) (consultate perlsec). $passwd e $shell, la password cifrata dell'utente e la shell di login sono anch'esse dei dati potenzialmente dannosi per il medesimo motivo.
In contesto scalare, otterrete il nome a meno che la funzione non sia ottenuta con una ricerca per nome, nel qual caso otterrete l'altra cosa, qualunque essa sia (se l'elemento non esiste, otterrete il valore indefinito). Per esempio:
$uid = getpwnam($nome);
$nome = getpwuid($num);
$nome = getpwent();
$gid = getgrnam($nome);
$nome = getgrgid($num;
$nome = getgrent();
#ecc.
In getpw*(), i campi $quota, $commento e $scadenza sono casi
speciali nel senso che in molti sistemi non sono supportati. Se
$quota non è supportato, è uno scalare vuoto.
Se è supportato, di solito codifica il valore della quota
del disco. Se $commento non è supportato, è uno
scalare vuoto. Se è supportato di solito codifica dei
commenti amministrativi sull'utente. In alcuni sistemi il campo
$quota può essere $cambiamento oppure $eta, campi che
hanno a che fare con l'obsolescenza delle password. In alcuni
sistemi, il campo $commento può essere $classe. Il campo
$scadenza, se presente, codifica il periodo di scadenza dell'account
o della password. Per la disponibilità e l'esatto significato
di questi campi nel vostro sistema, consultate la documentazione di
getpwnam(3) e il file pwd.h. Potete anche scoprire dall'interno
del Perl che significato hanno i vostri $quota e $commento e se
possedete il campo $expire, tramite l'utilizzo del modulo Config e
i valori d_pwquota, d_pwage, d_pwchange, d_pwcomment e
d_pwexpire. I file con le password shadow sono supportati solo se
l'azienda produttrice di software che vi fornisce li ha implementati
in quel modo intuitivo che, chiamando le routine della libreria C
usuale, ottiene le versioni shadow se siete in esecuzione con i
privilegi o se esistono le funzioni shadow(3) come si trovano in
System V (questo include Solaris e Linux). Quei sistemi che
implementano un'infrastruttura proprietaria per le password shadow
è improbabile che siano supportati.
Il valore di $members restituito da getgr*() è una lista separata da spazi dei nomi di login dei membri del gruppo.
Per le funzioni gethost*(), se la variabile h_errno è supportata in C, vi sarà
restituita attraverso $? se la chiamata di funzione fallisce. Il valore @addrs restituito da
una chiamata che ha avuto successo è una lista di indirizzi grezza, restituita dalla
corrispondente chiamata della libreria di sistema. In ambito Internet, ogni indirizzo è
lungo 4 byte e potete effetturare unpack su esso scrivendo qualcosa come:
($a,$b,$c,$d) = unpack('C4',$ind[0]);
La libreria Socket rende questo un po' più facile:
use Socket;
$indint = inet_aton("127.1"); # o qualsiasi indirizzo
$nome = gethostbyaddr($indint, AF_INET);
# oppure andando nell'altro verso
$strind = inet_ntoa($indint);
Se siete stanchi di tenere a mente quali valori corrispondono a quali elementi della lista
restituita, vengono fornite delle interfaccie per nome nei moduli standard: File::stat,
Net::hostent, Net::netent, Net::protoent, Net::servent, Time::gmtime, Time::localtime
e User::grent. Queste si sovrappongono alle normali funzioni interne, fornendo versioni che
restituiscono oggetti con i nomi appropriati per ogni campo. Per esempio:
use File::stat; use User::pwent; $suo = (stat($nomefile)->uid == pwent($chiunque)->uid);
Anche se sembra che siano gli stessi metodi di chiamata (uid), non lo sono perché un oggetto
File::stat è diverso da un oggetto User::pwent.