perldbmfilter - Online în cloud

Aceasta este comanda perldbmfilter care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


perldbmfilter - Filtre Perl DBM

REZUMAT


$db = tie %hash, 'DBM', ...

$vechiul_filtru = $db->filter_store_key ( sub { ... } );
$vechiul_filtru = $db->filter_store_value( sub { ... } );
$old_filter = $db->filter_fetch_key ( sub { ... } );
$old_filter = $db->filter_fetch_value( sub { ... } );

DESCRIERE


Cele patru metode „filter_*” prezentate mai sus sunt disponibile în toate modulele DBM livrate
cu Perl, și anume DB_File, GDBM_File, NDBM_File, ODBM_File și SDBM_File.

Fiecare dintre metode funcționează identic și este folosită pentru a instala (sau dezinstala) un singur DBM
Filtru. Singura diferență dintre ele este locul în care este instalat filtrul.

A sumariza:

cheie_filtru_magazin
Dacă a fost instalat un filtru cu această metodă, acesta va fi invocat de fiecare dată
scrieți o cheie pentru o bază de date DBM.

filter_store_value
Dacă a fost instalat un filtru cu această metodă, acesta va fi invocat de fiecare dată
scrieți o valoare într-o bază de date DBM.

filter_fetch_key
Dacă a fost instalat un filtru cu această metodă, acesta va fi invocat de fiecare dată
citiți o cheie dintr-o bază de date DBM.

filter_fetch_value
Dacă a fost instalat un filtru cu această metodă, acesta va fi invocat de fiecare dată
citiți o valoare dintr-o bază de date DBM.

Puteți utiliza orice combinație a metodelor de la niciuna la toate patru.

Toate metodele de filtrare returnează filtrul existent, dacă este prezent, sau „undef” dacă nu.

Pentru a șterge un filtru, treceți „undef”.

Filtru
Când fiecare filtru este apelat de Perl, o copie locală a lui $_ va conține cheia sau valoarea care urmează să fie
filtrat. Filtrarea se realizează prin modificarea conținutului lui $_. Codul de retur de la
filtrul este ignorat.

An Exemplu: il NULL terminare problemă.
Filtrele DBM sunt utile pentru o clasă de probleme în care dvs mereu vreau sa fac la fel
transformare la toate cheile, toate valorile sau ambele.

De exemplu, luați în considerare următorul scenariu. Aveți o bază de date DBM de care aveți nevoie
partajați cu o aplicație C terță parte. Aplicația C presupune că toate chei și valori
sunt terminate NULL. Din păcate, atunci când Perl scrie în bazele de date DBM, nu folosește NULL
terminare, astfel încât aplicația dvs. Perl va trebui să gestioneze ea însăși terminarea NULL. Cand
scrieți în baza de date, va trebui să utilizați ceva de genul acesta:

$hash{"$key\0"} = "$valoare\0";

În mod similar, NULL trebuie luat în considerare atunci când luați în considerare lungimea
chei/valori existente.

Ar fi mult mai bine dacă ați putea ignora problema terminărilor NULL în principal
codul aplicației și au un mecanism care a adăugat automat NULL-ul final la toate
chei și valori ori de câte ori scrieți în baza de date și le eliminați când citiți
din baza de date. După cum sunt sigur că ați ghicit deja, aceasta este o problemă a DBM
Filtrele se pot repara foarte ușor.

folosiți strict;
folosiți avertismente;
utilizați SDBM_File;
utilizați Fcntl;

%hash-ul meu;
my $filename = "filtează";
deconectați $filename;

my $db = tie(%hash, 'SDBM_File', $filename, O_RDWR|O_CREAT, 0640)
sau die „Nu se poate deschide $filename: $!\n”;

# Instalați filtre DBM
$db->filter_fetch_key ( sub { s/\0$// } );
$db->filter_store_key ( sub { $_ .= "\0" } );
$db->filter_fetch_value(
sub { fără avertismente „neinițializat”; s/\0$// } );
$db->filter_store_value( sub { $_ .= "\0" } );

$hash{"abc"} = "def";
my $a = $hash{"ABC"};
#...
undef $db;
dezleagă %hash;

Codul de mai sus folosește SDBM_File, dar va funcționa cu oricare dintre modulele DBM.

Sperăm că conținutul fiecăruia dintre filtre ar trebui să se explice de la sine. Ambele „aduc”
filtrele elimină NULL-ul final, iar ambele filtre „de stocare” adaugă un NULL final.

O alta Exemplu: Cheie is a C int
Iată un alt exemplu din viața reală. În mod implicit, ori de câte ori Perl scrie într-o bază de date DBM
scrie întotdeauna cheia și valoarea ca șiruri. Deci, când folosești asta:

$hash{12345} = „ceva”;

cheia 12345 va fi stocată în baza de date DBM ca șirul de 5 octeți „12345”. daca tu
Doriți de fapt ca cheia să fie stocată în baza de date DBM ca C int, va trebui să o utilizați
„împachetați” când scrieți și „despachetați” când citiți.

Iată un filtru DBM care face acest lucru:

folosiți strict;
folosiți avertismente;
utilizați DB_File;
%hash-ul meu;
my $filename = "filtează";
deconectați $filename;

my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666,
$DB_HASH sau die „Nu se poate deschide $filename: $!\n”;

$db->filter_fetch_key ( sub { $_ = unpack("i", $_) } );
$db->filter_store_key ( sub { $_ = pachet ("i", $_) } );
$hash{123} = „def”;
#...
undef $db;
dezleagă %hash;

Codul de mai sus folosește DB_File, dar din nou va funcționa cu oricare dintre modulele DBM.

De data aceasta au fost folosite doar două filtre; trebuie doar să manipulăm conținutul
cheie, deci nu a fost necesar să instalați niciun filtre de valoare.

Utilizați perldbmfilter online folosind serviciile onworks.net



Cele mai recente programe online Linux și Windows