Какой лучший способ открыть и прочитать файл в Perl? - PullRequest
43 голосов
/ 25 ноября 2008

Обратите внимание - я не ищу «правильный» способ открыть / прочитать файл или способ, которым я должен открывать / читать файл каждый раз. Мне просто интересно узнать, каким образом большинство людей используют, и, возможно, изучить несколько новых методов одновременно:) *

Очень распространенный блок кода в моих программах на Perl - это открытие файла и чтение или запись в него. Я видел так много способов сделать это, и мой стиль выполнения этой задачи несколько лет менялся. Мне просто интересно, какой метод лучший (если есть лучший способ) это сделать?

Раньше я открывал такой файл:

my $input_file = "/path/to/my/file";
open INPUT_FILE, "<$input_file"  || die "Can't open $input_file: $!\n";

Но я думаю, что есть проблемы с перехватом ошибок.

Добавление скобок, по-видимому, исправляет сообщение об ошибке:

open (INPUT_FILE, "<$input_file")  || die "Can't open $input_file: $!\n";

Я знаю, что вы также можете назначить файловый дескриптор переменной, поэтому вместо использования "INPUT_FILE", как я делал выше, я мог бы использовать $ input_filehandle - это лучше?

Для чтения файла, если он маленький, что-то не так с глобализацией, как это?

my @array = <INPUT_FILE>;

или

my $file_contents = join( "\n", <INPUT_FILE> );

или вы всегда должны проходить, как это:

my @array;
while (<INPUT_FILE>) {
  push(@array, $_);
}

Я знаю, что в Perl так много способов сделать что-то, мне просто интересно, есть ли предпочтительные / стандартные методы открытия и чтения в файле?

Ответы [ 12 ]

2 голосов
/ 26 ноября 2008

Если эти программы только для вашей производительности, что бы ни работало! Постройте столько обработки ошибок, сколько вам нужно.

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

Один совет, который я получил из одной из глав «Прагматического программиста» (Хант и Томас), заключается в том, что вам может потребоваться, чтобы скрипт сохранил для вас резервную копию файла, прежде чем он перейдет к нарезке и нарезке кубиками.

1 голос
/ 01 декабря 2008

Дамиан Конвей делает это так:

$data = readline!open(!((*{!$_},$/)=\$_)) for "filename";

Но я вам этого не рекомендую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...