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 <[email protected]> escreveu: > >>>>> "Marcio" == Marcio <- Google < > [email protected]>> 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 => '[email protected]' }, > { nome => 'bar', email => '[email protected]' }, > ... > ); > > 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: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > -- [...]'s Marcio
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
