[SP-pm] Array? Hashes? Outros?

Marcio - Google marciorp at gmail.com
Tue Mar 12 10:29:48 PDT 2013


Eden, é porque eu não tenho BD instalado, e não posso instalar também. Além
do que, os dados só existem durante a execução, então não sei se é legal
usar um BD para isso.

Acho que o DB_File pode ser a saída. Vou tentar colocar em prática os
exemplos e sugestões que recebi e ver qual atende melhor.

Em 12 de março de 2013 06:42, Eden Cardim <eden em insoli.de> escreveu:

> >>>>> "Marcio" == Marcio  <- Google <
> marciorp-Re5JQEeQqe8AvxtiuMwx3w em public.gmane.org>> writes:
>
>     Marcio> Mestres, Tenho um script que quado inicializa começa
>     Marcio> acumular algumas informações, e quando é finalizado essas
>     Marcio> informações são descartadas. É pouco coisa. Preciso de
>     Marcio> algo como uma tabela temporária, os dados só existem
>     Marcio> durante a execução do script. To usando por enquanto
>     Marcio> hashes, mais tá ficando confuso. Pensando em uma tabela em
>     Marcio> um banco de dados (o que é inviável)
>
> Porque é inviável?
>
>     Marcio> ela teria 7 colunas, sendo uma delas a chave e pela qual
>     Marcio> preciso localizar os registros, e não teria mais que 20
>     Marcio> registros.
>
> A forma típica de implementar isso é fazer exatamente o que um banco
> de dados faria. Você precisa de duas estruturas, uma tabela e um
> índice dessa tabela.
>
> my @usuarios = (
>   { nome => 'foo', email => 'foo em foo.com' },
>   { nome => 'bar', email => 'bar em bar.com' },
>   ...
> );
>
> my %indice_nome;
>
> for my $registro (@usuario) {
>   $indice_nome{$registro->{nome}} = $registro;
> }
>
> Depois você vai poder acessar os registros usando o índice:
>
> my $registro = $indice_nome{foo};
>
> Tem alguns problemas que você vai precisar resolver manualmente. Você
> vai precisar atualizar o índice manualmente depois de qualquer
> operação de escrita. E você também vai precisar garantir a unicidade
> da chave. Sem essa verificação, se houverem registros com chaves
> duplicadas, você vai perder dados.
>
>     Marcio> Quando o script inicia, a tabela não teria nenhum valor,
>     Marcio> apenas a "estrutura", durante a execução serão incluídos,
>     Marcio> excluídos e alterados registros. Quando o script termina
>     Marcio> os dados são descartados.
>
>     Marcio> Qual a maneira mais prática e elegante de fazer isso?
>
> A maneira que eu vejo como mais prática é usar um banco de dados
> mesmo. Você pode usar SQLite in-memory, assim:
>
> my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
>
> Se não puder instalar módulos, tem o DB_File que vem no core:
>
> http://perldoc.perl.org/DB_File.html#SYNOPSIS
>
> --
> Eden Cardim -- Insolide Soluções de TI Ltda.
> +55 11 9644 8225
> http://insoli.de
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>



-- 

[...]'s

Marcio
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130312/1fe0b376/attachment-0001.html>


More information about the SaoPaulo-pm mailing list