[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