В Perl, как я могу прочитать весь файл в строку? - PullRequest
111 голосов
/ 05 июня 2009

Я пытаюсь открыть файл .html в виде одной большой длинной строки. Вот что у меня есть:

open(FILE, 'index.html') or die "Can't read file 'filename' [$!]\n";  
$document = <FILE>; 
close (FILE);  
print $document;

, что приводит к:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN

Однако я хочу, чтобы результат выглядел следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br> "http://www.w3.org/TR/html4/loose.dtd"><br> <html><br> <head><br> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Таким образом, я могу легче искать весь документ.

Ответы [ 17 ]

2 голосов
/ 09 мая 2014

Я бы сделал это самым простым способом, чтобы любой мог понять, что происходит, даже если есть более разумные способы:

my $text = "";
while (my $line = <FILE>) {
    $text .= $line;
}
2 голосов
open f, "test.txt"
$file = join '', <f>

<f> - возвращает массив строк из нашего файла (если $/ имеет значение по умолчанию "\n"), а затем join '' вставит этот массив в.

1 голос
/ 14 марта 2016

Используйте

 $/ = undef;

до $document = <FILE>;. $/ - это разделитель входных записей , который по умолчанию является новой строкой. Переопределив его в undef, вы говорите, что разделителя полей нет. Это называется режимом "slurp".

Другие решения, такие как undef $/ и local $/ (но не my $/), повторно декларируют $ / и таким образом дают тот же эффект.

0 голосов
/ 31 мая 2017

Я не знаю, хорошая ли это практика, но я использовал это:

($a=<F>);
0 голосов
/ 30 декабря 2013

Вы можете просто создать подпрограмму:

#Get File Contents
sub gfc
{
    open FC, @_[0];
    join '', <FC>;
}
0 голосов
/ 26 сентября 2012

Это все хорошие ответы. НО, если вы чувствуете себя ленивым, и файл не такой большой, и безопасность не является проблемой (вы знаете, что у вас нет испорченного имени файла), тогда вы можете выложить:

$x=`cat /tmp/foo`;    # note backticks, qw"cat ..." also works
0 голосов
/ 28 декабря 2012

Вы можете использовать cat в Linux:

@file1=\`cat /etc/file.txt\`;
...