File slurp em Perl com e sem módulo

Publicado por Daniel Vinciguerra em 04/04/2016

[ Hits: 2.148 ]

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

Removendo caractere ^M de arquivos com Perl

Busca em arquivos

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

Verificando os processos ativos no sistema

Iniciando máquina virtual "automaticamente" no VirtualBox

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts