Вы можете использовать статическую переменную для хранения максимальной температуры в контуре, где вы вставляете или где вы отображаете.
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>;
}
Как альтернатива тому, что сказал 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");
Обратите внимание что это die
s (хорошо... croak
s, но это - просто надлежащий способ звонить, умирают от модуля) на ошибках, таким образом, Вы, возможно, должны выполнить это в блоке оценки для фиксации любых ошибок.
У меня нет достаточной репутации для комментария, таким образом, я приношу извинения за то, что сделал это другое сообщение.
Harold Bamford: $ / не должен быть неясной переменной программисту Perl. Новичок не может знать это, но он должен изучить это. Метод соединения является плохим выбором по причинам, указанным в статье, связанной hackingwords выше. Вот соответствующая цитата из статьи:
Это напрасно разделяет входной файл на строки (соединение предоставляет контекст списка), и затем соединяет те строки снова. Исходный кодер этой идиомы, очевидно, никогда не считал perlvar и изучил, как использовать $ / для разрешения скалярного прихлебывания.
Существует обсуждение различных способов считать файл здесь.
Вы могли сделать что-то как:
$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
однако Вам нужно.Примечание: Этот код не тестируется, но он должен дать Вам общее представление.
Если я не имею, Хлебают или Perl6:: Хлебайте поблизости затем, я обычно иду с....
open my $fh, '<', 'file.txt' or die $!;
my $whole_file = do { local $/; <$fh> };
Я настроил бы ответ draegtun как это, чтобы заставить его сделать точно, что спрашивали:
my $buffer;
if ( open my $fh, '<', 'fileName' ) {
$buffer = do { local $/; <$fh> };
close $fh;
} else {
$buffer = 'The file could not be opened.';
}
Просто присоединитесь ко всем строкам вместе в строку:
open(F, $file) or die $!;
my $content = join("", <F>);
close F;
(Было ранее предложено использовать соединение "\n", но это добавит дополнительные новые строки. Каждая строка уже имеет новую строку в своем конце, когда она читается.)