[Cascavel-pm] otimização em manipulação de texto

Nelson Ferraz nferraz em gmail.com
Terça Dezembro 4 09:56:28 PST 2007


> Basicamente, abro o arquivo, coloco o conteúdo numa
> array através do operador diamante, pesquiso
> linha-a-linha o meu fenômeno. Quando encontrado,
> modifico-o, volto a salvar em disco e inicio tudo
> novamente.

Se você estiver lidando com arquivos grandes, é melhor fazer as
substituições linha a linha, ou parágrafo a parágrafo, do que
carregá-lo inteiro na memória.

Isto é:

    while ( my $line = <> ) {

        # do something with $line

    }

> Bem, Perl é uma ótima linguagem, principalmente, para
> mim, por eu não precisar declarar todas as variáveis,
> mas Perl não deve ser à prova de estupidez, e acho que
> meu código está um pouquinho estúpido.

Você pode começar a torná-lo mais inteligente, se abrir mão do "não
precisar declarar todas as variáveis".

Ou seja: inclua um "use strict" e um "use warnings" no começo do seu programa.

É bem provável que, quando você fizer isso, seu programa comece a
apresentar mensagens de erro. É para isso que estas diretivas servem,
para apontar os problemas, de forma que você possa corrigi-los.

Portanto, comece os seus programas com:

    #!/usr/bin/perl

    use strict;
    use warnings;

    while ( my $line = <> ) {
        # ...
    }

> Gostaria de saber a melhor forma de otimizá-lo.
> Acredito que um caminho seria fazer todas as
> alterações e salvar em disco apenas no final. Porém,
> meus dados, eventualemnte, podem chegar a 500 Mb e
> centenas de arquivos plain text, ou MUITO mais. Há
> alguma forma "perlniana" de automatizar o fluxo
> memória/disco para fins de otimização? Algo que
> monitore a quantidade de memória necessária e decida
> onde os dados serão armazenados. Ou nada disto é
> necessário?

Na minha opinião, é melhor lidar com pedaços menores de texto, ao
invés de tentar colocar tudo na memória de uma vez.

Se você nos contar que tipo de dados está lidando -- ou melhor ainda.
se puder nos fornecer um exemplo -- talvez possamos ajudá-lo melhor.

[]s

Nelson


Mais detalhes sobre a lista de discussão Cascavel-pm