File slurp em Perl com e sem módulo

Publicado por Daniel Vinciguerra em 04/04/2016

[ Hits: 1.710 ]

Blog: http://bivee.com.br

 


File slurp em Perl com e sem módulo



Quando estamos trabalhando com arquivos para leitura é muito comum vermos um algoritmo de leitura "linha a linha" (line by line), onde temos que fazer uma iteração em todas as linhas do arquivo até o mesmo chegar ao fim do mesmo.

open my $fh, "file.txt";
while(my $line = <$fh>){
  say $line;
}
close $fh;

Porém esta não é a única forma de abrir um arquivo para leitura! Hoje vou mostrar como fazer um 'file slurp' que nada mais é do que a leitura do arquivo inteiro de uma só vez para dentro de uma variável.

FAZENDO FILE SLURP

Em Perl podemos fazer uso desta técnica de varias formas. Uma delas é usando diretamente a variável responsável pelo 'Input Record Separator' ali mesmo na linha onde se quer fazer o 'file slurp'.

my $string;
{
  local $/ = undef;
  open my $fh, "file.txt";
  $string = <$fh>;
  close $fh;
}

Ou usando tudo em uma só linha como é bem comum encontrar:

my $string;
{ local $/ = undef; open my $fh, "file.txt"; $string = <$fh>; close $fh }

Explicando brevemente, o que ocorreu acima é que a variável '$/' (Input Record Separator) tem o valor padrão como o new-line e por isso quando estamos fazendo 'while(my $line = <$fh>)', ele lê o texto do começo da linha até encontrar o new-line, e depois novamente, e novamente até que o fim do arquivo chegue.

O prefixo 'local' é importante devido ao fato de esta variável ser de acesso global, portanto nós localizamos o acesso a ela dentro dos {} (colchetes) para que nenhuma outra parte do nosso sistema seja afetado por esta alteração.

Basicamente o 'local $/ = undef' esta fazendo com que a leitura não mais pare no new-line, dizendo ao Perl para prosseguir lendo até o final do arquivo.

UTILIZANDO O MÓDULO

Outra forma de se fazer isso é através do módulo File::Slurp que lhe dá uma interface mais simples e enxuta para realizar esse trabalho:

use File::Slurp;

my $string = read_file 'file.txt';
say $string;

Note que é necessário que você instale o módulo para que ele possa funcionar.

cpan File::Slurp



Outras dicas deste autor

Solicitando uma conta no CPAN para colaborar com módulos Perl

Leitura recomendada

A melhor forma de apagar milhões de arquivos em servidores GNU/Linux

Removendo caractere ^M de arquivos com Perl

Busca em arquivos

Imprimindo documentos em PDF bloqueado

Filmando seu desktop com o Krut

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário