Если вы просто хотите отбросить ввод к выводу, это должно сработать.
use Carp ();
{ #Lexical For FileHandle and $/
open my $fh, '<' , '/path/to/file.txt' or Carp::croak("File Open Failed");
local $/ = undef;
print scalar <$fh>;
close $fh or Carp::carp("File Close Failed");
}
Я предполагаю, что в ответ на "Есть ли в Perl PHP ReadFile Equivelant", и я думаю, что мой ответ будет "Но он на самом деле не нужен".
Я использовал ручные элементы управления вводом-выводом PHP в PHP, и это очень неудобно, Perls настолько прост в использовании, что вычеркивание функции «один размер подходит всем» кажется чрезмерным.
Кроме того, вы можете обратиться к поддержке X-SendFile
и, в основном, отправить заголовок своему веб-серверу, чтобы сообщить ему, какой файл отправить: http://john.guen.in/past/2007/4/17/send_files_faster_with_xsendfile/ (при условии, конечно, что у него достаточно разрешений для доступа к файлу). , но файл просто НЕ обычно доступен через стандартный URI)
Редактировать Отмечено, что лучше лучше делать в цикле, я тестировал приведенный выше код на жестком диске, и он неявно пытается сохранить все это в невидимом временная переменная и съешь весь свой баран.
Альтернативное использование блоков
Следующий улучшенный код считывает данный файл в блоках по 8192 символа, что намного более эффективно использует память и обеспечивает пропускную способность, вполне сопоставимую с моей скоростью чтения с чистого диска. (Я также указал на / dev / full для приступов и хихиканья и получил здоровую пропускную способность 500 Мбит / с, и она не съела всех моих баранов, так что это должно быть хорошо)
{
open my $fh , '<', '/dev/sda' ;
local $/ = \8192; # this tells IO to use 8192 char chunks.
print $_ while defined ( $_ = scalar <$fh> );
close $fh;
}
Применение предложений jrockways
{
open my $fh , '<', '/dev/sda5' ;
print $_ while ( sysread $fh, $_ , 8192 );
close $fh;
}
Это буквально удваивает производительность ... и в некоторых случаях дает мне лучшую пропускную способность, чем DD делает O_o.