Как я читаю содержание небольшого текстового файла в скаляр в Perl?

Вы можете использовать статическую переменную для хранения максимальной температуры в контуре, где вы вставляете или где вы отображаете.

10
задан Bill the Lizard 28 January 2009 в 15:38
поделиться

8 ответов

Из поваренной книги Perl:

my $filename = 'file.txt';
open( FILE, '<', $filename ) or die 'Could not open file:  ' . $!;

undef $/;
my $whole_file = <FILE>;

Я локализовал бы изменения хотя:

my $whole_file = '';
{
    local $/;
    $whole_file = <FILE>;
}
19
ответ дан 3 December 2019 в 13:19
поделиться

Как альтернатива тому, что сказал Alex, можно установить модуль File::Slurp (cpan -i File::Slurp из командной строки) и использование это:

use File::Slurp;
# Read data into a variable
my $buffer = read_file("fileName");
# or read data into an array
my @buffer = read_file("fileName");

Обратите внимание что это dies (хорошо... croaks, но это - просто надлежащий способ звонить, умирают от модуля) на ошибках, таким образом, Вы, возможно, должны выполнить это в блоке оценки для фиксации любых ошибок.

18
ответ дан 3 December 2019 в 13:19
поделиться

У меня нет достаточной репутации для комментария, таким образом, я приношу извинения за то, что сделал это другое сообщение.

Harold Bamford: $ / не должен быть неясной переменной программисту Perl. Новичок не может знать это, но он должен изучить это. Метод соединения является плохим выбором по причинам, указанным в статье, связанной hackingwords выше. Вот соответствующая цитата из статьи:

Это напрасно разделяет входной файл на строки (соединение предоставляет контекст списка), и затем соединяет те строки снова. Исходный кодер этой идиомы, очевидно, никогда не считал perlvar и изучил, как использовать $ / для разрешения скалярного прихлебывания.

1
ответ дан 3 December 2019 в 13:19
поделиться

Существует обсуждение различных способов считать файл здесь.

1
ответ дан 3 December 2019 в 13:19
поделиться

Вы могли сделать что-то как:

$data_file="somefile.txt";
open(DAT, $data_file);
@file_data = <DAT>;
close(DAT);

Это даст Вам содержание файла в массиве, который можно использовать, для чего Вы хотите, например, если бы Вы хотели каждую отдельную строку, то Вы могли бы сделать что-то как:

foreach $LINE (@file_data)
{
    dosomethingwithline($LINE);
}

Для полного примера использования:

my $result;
$data_file = "somefile.txt";
my $opened = open(DAT, $data_file);
if (!$opened)
{
    $result = "Error.";
}
else
{
    @lines = <DAT>;
    foreach $LINE (@lines)
    {
        $result .= $LINE;
    }
    close(DAT);
}

Затем можно использовать $result однако Вам нужно.Примечание: Этот код не тестируется, но он должен дать Вам общее представление.

1
ответ дан 3 December 2019 в 13:19
поделиться

Если я не имею, Хлебают или Perl6:: Хлебайте поблизости затем, я обычно иду с....

open my $fh, '<', 'file.txt' or die $!;

my $whole_file = do { local $/; <$fh> };
15
ответ дан 3 December 2019 в 13:19
поделиться

Я настроил бы ответ draegtun как это, чтобы заставить его сделать точно, что спрашивали:

my $buffer;
if ( open my $fh, '<', 'fileName' ) {
    $buffer = do { local $/; <$fh> };
    close $fh;
} else {
    $buffer = 'The file could not be opened.';
}
1
ответ дан 3 December 2019 в 13:19
поделиться

Просто присоединитесь ко всем строкам вместе в строку:

open(F, $file) or die $!;
my $content = join("", <F>); 
close F;

(Было ранее предложено использовать соединение "\n", но это добавит дополнительные новые строки. Каждая строка уже имеет новую строку в своем конце, когда она читается.)

0
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: