Slurp um arquivo em um escalar

Então você quer um arquivo em um escalar, hein?

Bem, em Perl, há uma expressão simples para fazer isso

open(my $fh, "<", "file.txt") or die "$!";
my $contents = do { local $/; <$fh> };
close
($fh) or die "$!;

# $contents now contains the contents of file.txt

print $contents;

Isso é tudo que há para fazer. Primeiro removemos a variável separadora de registro de entrada ( $/) para o bloco e, em seguida, apenas retornamos o conteúdo do arquivo do bloco.

A variável separadora de registro de entrada determina o que Perl considera uma linha. Normalmente, isso é definido como nova linha, mas como não queremos um array, apenas o removemos para que o perl pense que o arquivo inteiro é uma linha.

Como o arquivo inteiro agora tem apenas uma linha, usar o <>para obter o conteúdo retornará um escalar.

NOTA : É importante que façamos isso dentro de um bloco anônimo. Não queremos foder nenhum outro módulo Perl que faça suposições sobre $/.