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
Nenhum comentário foi encontrado.