Да, Существует больше, чем один способ сделать это , но должен быть канонический, самый эффективный или самый краткий способ. Я добавлю ответы, которые знаю, и посмотрю, что просачивается наверх.
Чтобы было ясно, вопрос в том, как лучше всего прочитать содержимое файла в строку. Одно решение на ответ.
См. Сводку Perl6 :: Slurp , которая невероятно гибка и, как правило, делает правильные вещи без особых усилий.
Никто ничего не сказал о read или sysread, поэтому вот простой и быстрый способ:
my $string; { open my $fh, '<', $file or die "Can't open $file: $!"; read $fh, $string, -s $file; # or sysread close $fh; }
Вот хорошее сравнение самых популярных способов сделать это:
http://poundcomment.wordpress.com/2009/08/02/perl-read-entire-file/
Для однострочников вы обычно можете использовать переключатель -0 (с -n), чтобы perl читал весь файл сразу (если файл не содержит нулевых байтов):
-0
-n
perl -n0e 'print "content is in $_\n"' filename
Если это бинарный файл, вы можете использовать -0777:
-0777
perl -n0777e 'print length' filename
Кандидат на худший способ сделать это! (См. Комментарий.)
open(F, $filename) or die "OPENING $filename: $!\n"; @lines = <F>; close(F); $string = join('', @lines);
Отрегулируйте специальную переменную-разделитель записей $/
$/
undef $/; open FH, '<', $filename or die "$!\n"; my $contents = <FH>; close FH;
# Takes the name of a file and returns its entire contents as a string. sub getfile { my($filename) = @_; my($result); open(F, $filename) or die "OPENING $filename: $!\n"; while(<F>) { $result .= $_; } close(F); return $result; }