Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > как прочитать файл в скаляр?


Автор: IceSunrise 28.8.2008, 12:48
Привет!

Как можно сразу прочитать содержимое файла в скаляр?
Например, если файл текстовый, то я делаю так:
Код

open FILE, "<$0" or die "Can't open file ($0): '$!'\n";

my $data;
$data .= $_ for <FILE>;

print "DATA: '$data'\n";


А можно как-нибудь без цикла? А если файл бинарный? Читать порциями по N байт? хочу проще smile

Автор: arto 28.8.2008, 12:57
my $body = do { local $/; <FILE> };

Автор: AriX 28.8.2008, 13:06
File::Slurp

Автор: IceSunrise 28.8.2008, 13:13
arto,  спасибо, интересно, но с бинарными не пройдет номер.


AriX,  спасибо за наводку, так и думал, что есть подобный модуль.

Автор: gcc 28.8.2008, 13:13
Код

open(ML, "mmm");
while ($line = <ML>)
{

Автор: arto 28.8.2008, 13:25
хм, почему не пройдет?

# perl -e 'open F,$ARGV[0]; $a = do { local $/; <F> }; print $a;' /bin/ls > ls
# cmp /bin/ls ls
#

Автор: IceSunrise 28.8.2008, 15:47
arto,  вы правы! Прочитал, что когда переменная $/ не определена, это заставляет perl проглатывать целые файлы сразу. Здорово, спасибо! smile

Автор: nitr 28.8.2008, 17:33
gcc, ROFL

arto, прав.

IceSunrise, надеюсь у вас файлы маленькие ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)