InglêsFrancêsEspanhol

favicon do OnWorks

perldbmfilter - Online na nuvem

Execute perldbmfilter no provedor de hospedagem gratuita OnWorks no Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS

Este é o comando perldbmfilter que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador Windows online ou emulador MAC OS online

PROGRAMA:

NOME


perldbmfilter - Filtros Perl DBM

SINOPSE


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

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

DESCRIÇÃO


Os quatro métodos "filter_ *" mostrados acima estão disponíveis em todos os módulos DBM que vêm
com Perl, ou seja, DB_File, GDBM_File, NDBM_File, ODBM_File e SDBM_File.

Cada um dos métodos funciona de forma idêntica e é usado para instalar (ou desinstalar) um único DBM
Filtro. A única diferença entre eles é o local onde o filtro é instalado.

Para resumir:

filter_store_key
Se um filtro foi instalado com este método, ele será invocado toda vez que você
escrever uma chave para um banco de dados DBM.

filtro_store_value
Se um filtro foi instalado com este método, ele será invocado toda vez que você
escreva um valor em um banco de dados DBM.

filter_fetch_key
Se um filtro foi instalado com este método, ele será invocado toda vez que você
leia uma chave de um banco de dados DBM.

filter_fetch_value
Se um filtro foi instalado com este método, ele será invocado toda vez que você
leia um valor de um banco de dados DBM.

Você pode usar qualquer combinação dos métodos de nenhum a todos os quatro.

Todos os métodos de filtro retornam o filtro existente, se presente, ou "undef" se não estiver.

Para deletar um filtro, passe "undef" para ele.

A filtros
Quando cada filtro é chamado por Perl, uma cópia local de $ _ conterá a chave ou valor a ser
filtrado. A filtragem é obtida modificando o conteúdo de $ _. O código de retorno do
o filtro é ignorado.

An Exemplo: da NULL terminação problema.
Filtros DBM são úteis para uma classe de problemas onde você sempre quer fazer o mesmo
transformação para todas as chaves, todos os valores ou ambos.

Por exemplo, considere o seguinte cenário. Você tem um banco de dados DBM de que precisa
compartilhar com um aplicativo C de terceiros. O aplicativo C assume que todos os chaves e valores
são finalizados com NULL. Infelizmente, quando Perl grava em bancos de dados DBM, ele não usa NULL
terminação, então seu aplicativo Perl terá que gerenciar a terminação NULL em si. Quando
você escreve no banco de dados, você terá que usar algo assim:

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

Da mesma forma, o NULL precisa ser levado em consideração quando você está considerando o comprimento de
chaves / valores existentes.

Seria muito melhor se você pudesse ignorar o problema de terminações NULL no principal
código do aplicativo e tem um mecanismo que adiciona automaticamente o NULL de terminação a todos
chaves e valores sempre que você gravar no banco de dados e removê-los ao ler
do banco de dados. Como tenho certeza de que você já deve ter adivinhado, esse é um problema que o DBM
Os filtros podem ser corrigidos facilmente.

use estrito;
use avisos;
usar SDBM_File;
usar Fcntl;

meu% hash;
meu $ filename = "filt";
desvincular $ filename;

my $ db = tie (% hash, 'SDBM_File', $ filename, O_RDWR | O_CREAT, 0640)
ou morrer "Não é possível abrir $ filename: $! \ n";

# Instalar filtros DBM
$ db-> filter_fetch_key (sub {s / \ 0 $ //});
$ db-> filter_store_key (sub {$ _. = "\ 0"});
$ db-> filter_fetch_value (
sub {sem avisos 'não inicializado'; s / \ 0 $ //});
$ db-> filter_store_value (sub {$ _. = "\ 0"});

$ hash {"abc"} = "def";
meu $ a = $ hash {"ABC"};
# ...
undef $ db;
desamarre% hash;

O código acima usa SDBM_File, mas funcionará com qualquer um dos módulos DBM.

Esperançosamente, o conteúdo de cada um dos filtros deve ser autoexplicativo. Ambos "buscar"
os filtros removem o NULL de terminação e ambos os filtros de "armazenamento" adicionam um NULL de terminação.

Outro Exemplo: Chave is a C int
Aqui está outro exemplo da vida real. Por padrão, sempre que Perl grava em um banco de dados DBM,
sempre grava a chave e o valor como strings. Então, quando você usa isso:

$ hash {12345} = "algo";

a chave 12345 será armazenada no banco de dados DBM como a string de 5 bytes "12345". Se vocês
realmente deseja que a chave seja armazenada no banco de dados DBM como um C int, você terá que usar
"empacotar" ao escrever e "desempacotar" ao ler.

Aqui está um Filtro DBM que faz isso:

use estrito;
use avisos;
usar DB_File;
meu% hash;
meu $ filename = "filt";
desvincular $ filename;

meu $ db = tie% hash, 'DB_File', $ filename, O_CREAT | O_RDWR, 0666,
$ DB_HASH or die "Não é possível abrir $ filename: $! \ N";

$ db-> filter_fetch_key (sub {$ _ = unpack ("i", $ _)});
$ db-> filter_store_key (sub {$ _ = pack ("i", $ _)});
$ hash {123} = "def";
# ...
undef $ db;
desamarre% hash;

O código acima usa DB_File, mas novamente funcionará com qualquer um dos módulos DBM.

Desta vez, apenas dois filtros foram usados; só precisamos manipular o conteúdo do
chave, por isso não foi necessário instalar nenhum filtro de valor.

Use perldbmfilter online usando serviços onworks.net


Servidores e estações de trabalho gratuitos

Baixar aplicativos Windows e Linux

Comandos Linux

Ad