Каков наилучший способ записать файл в строку в Perl? - PullRequest
46 голосов
/ 16 октября 2008

Да, Существует больше, чем один способ сделать это , но должен быть канонический, самый эффективный или самый краткий способ. Я добавлю ответы, которые знаю, и посмотрю, что просачивается наверх.

Чтобы было ясно, вопрос в том, как лучше всего прочитать содержимое файла в строку. Одно решение на ответ.

Ответы [ 17 ]

4 голосов
/ 16 октября 2008

См. Сводку Perl6 :: Slurp , которая невероятно гибка и, как правило, делает правильные вещи без особых усилий.

3 голосов
/ 11 апреля 2012

Никто ничего не сказал о read или sysread, поэтому вот простой и быстрый способ:

my $string;
{
    open my $fh, '<', $file or die "Can't open $file: $!";
    read $fh, $string, -s $file;   # or sysread
    close $fh;
}
3 голосов
/ 18 ноября 2009

Вот хорошее сравнение самых популярных способов сделать это:

http://poundcomment.wordpress.com/2009/08/02/perl-read-entire-file/

3 голосов
/ 28 октября 2014

Для однострочников вы обычно можете использовать переключатель -0 -n), чтобы perl читал весь файл сразу (если файл не содержит нулевых байтов):

perl -n0e 'print "content is in $_\n"' filename

Если это бинарный файл, вы можете использовать -0777:

perl -n0777e 'print length' filename
1 голос
/ 16 октября 2008

Кандидат на худший способ сделать это! (См. Комментарий.)

open(F, $filename) or die "OPENING $filename: $!\n";
@lines = <F>;
close(F);
$string = join('', @lines);
0 голосов
/ 29 мая 2015

Отрегулируйте специальную переменную-разделитель записей $/

undef $/;
open FH, '<', $filename or die "$!\n";
my $contents = <FH>;
close FH;
0 голосов
/ 16 октября 2008
# 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...