[SP-pm] Array? Hashes? Outros?
Eden Cardim
eden at insoli.de
Tue Mar 12 03:42:33 PDT 2013
>>>>> "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
More information about the SaoPaulo-pm
mailing list