Мне нравится делать это с блоком do
, в котором я локализую @ARGV
, поэтому я могу использовать оператор diamond, чтобы создать для меня магию файла.
my $contents = do { local(@ARGV, $/) = $file; <> };
Если вам нужно, чтобы это было немного более надежно, вы можете легко превратить это в подпрограмму.
Если вам нужно что-то действительно надежное, которое обрабатывает все виды особых случаев, используйте File :: Slurp . Даже если вы не собираетесь его использовать, взгляните на источник, чтобы увидеть все дурацкие ситуации, с которыми он сталкивается. File :: Slurp имеет большую проблему безопасности это не выглядит как решение. Частично это является неспособностью правильно обрабатывать кодировки. Даже мой быстрый ответ имеет эту проблему. Если вам нужно обработать кодировку (возможно, из-за того, что вы не делаете все UTF-8 по умолчанию), это расширится до:
my $contents = do {
open my $fh, '<:encoding(UTF-8)', $file or die '...';
local $/;
<$fh>;
};
Если вам не нужно менять файл, вы можете использовать File :: Map .