dbmopen HASH,NOMEDB,MASCHERA
[Questa funzione è stata ampiamente soppiantata dalla
funzione tie].
Questa funzione effettua un legame tra un file di tipo dbm(3),
ndbm(3), sdbm(3), gdbm(3) oppure Berkeley DB in un hash. HASH
è il nome dell'hash. (Diversamente dalla normale open,
il primo argomento non è un filehandle, anche se ci
assomiglia). NOMEDB è il nome del database (senza
l'estensione .dir o .pag, se presente). Se il database non
esiste, viene creato con una protezione specificata da MASCHERA
(come modificato dalla funzione umask). Se il vostro sistema
supporta solo le vecchie funzioni DBM, nel vostro programma
potete effettuare solo una dbmopen. In vecchie versioni di
Perl, se il vostro sistema non possedeva né DBM né
ndbm, chiamare dbmopen produceva un errore bloccante; ora
ciò ricade su sdbm(3).
Se non avete accesso in scrittura sul file DBM, potete solo
leggere i valori dell'hash e non impostarli. Se volete testare la
possibilità di scrivere, usate o i test sui file oppure
tentate di impostare l'elemento di un hash fittizio all'interno di
un eval che catturerà l'errore.
Va notato che le funzioni come keys e values possono
restituire liste enormi quando sono usate su grandi file DBM.
Potreste preferire l'uso della funzione each per iterare su
grandi file DBM. Un esempio:
# stampa gli scostamenti del file history
dbmopen(%HIST,'/usr/lib/news/history',0666);
while (($chiave,$val) = each %HIST) {
print $chiave, ' = ', unpack('L',$val), "\n";
}
dbmclose(%HIST);
Consultate anche AnyDBM_File per una descrizione più
generale sui pro e contro dei vari approcci dbm, come pure DB_File
per una implementazione particolarmente ricca.
Potete controllare che libreria DBM state usando tramite il
caricamento della libreria prima di richiamare dbmopen():
use DB_File;
dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
or die "Non e` possibile aprire il file history di netscape: $!";