2014-02-07 4 views
1

я прочитал где-то о следующем методе, чтобы прочитать весь файл в массив Perl сразу,Читать весь файл сразу в массив

open my $file, '<', $filePath or die "Error: Unable to open file : $!"; 
my @fileData = <$file>; 
close $file; 

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

+5

Что можно сказать? В контексте массива, предоставляемом 'my @ fileData', оператор' <> 'считывает строки в массив с неявным циклом. Оно работает. Иногда это полезно. У Perl есть несколько девизов. Один из них - TMTOWTDI - есть больше, чем один способ сделать это. Другой - DWIM - Do What I Mean; по крайней мере, Perl делает это более чем на многих языках, если вы знаете, о чем вы просите. Это кусок духа. –

+2

's/array (? = \ S + context)/list/if $ nitpick;' –

+1

[Разделитель входных данных] (http://perldoc.perl.org/perlvar.html#%24%2f) и файл ([scalar vs list] (https://eval.in/98898)) определяет, как должно вести себя чтение. –

ответ

1

Ваше желание - моя команда - комментарий, переданный в ответ, с мягкой коррекцией в пути.

Что можно сказать? В массив контекст списка, предоставляемый my @fileData, оператор <> считывает строки в массив с неявным циклом. Оно работает. Иногда это полезно.

У Perl есть несколько девизов. Один из них - TMTOWTDI - есть больше, чем один способ сделать это. Другой - DWIM - Do What I Mean; по крайней мере, Perl делает это более чем на многих языках, если вы знаете, о чем вы просите. Это кусок духа.

0

readline - это встроенная функция Perl 5, которая реализует оператор <EXPR>. Он имеет другое поведение в скалярном и контекстном контексте.

Смежные вопросы