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 $/
.