Как я могу сгенерировать несколько файловых дескрипторов Perl программно? - PullRequest
3 голосов
/ 10 января 2010

Есть ли какой-нибудь способ в Perl генерировать файловые дескрипторы программно?

Я хочу открыть десять файлов одновременно и записать их, используя дескриптор файла, который состоит из (ИМЯ КОНСТРУКЦИИ + НОМЕР). Например:

 print const_name4  "data.."; #Then print the datat to file #4

Ответы [ 3 ]

9 голосов
/ 10 января 2010

Вы можете вставить файловые дескрипторы прямо в слот неинициализированного массива.

my @handles;
for my $number (0 .. 9) {
    open $handles[$number], '>', "data$number";
}

Не забывайте, что синтаксис для печати на дескриптор в массиве немного отличается:

print $handles[3] $data;    # syntax error
print {$handles[3]} $data;  # you need braces like this
5 голосов
/ 11 января 2010

С битом IO::File и map вы также можете сделать это:

use IO::File;

my @files = map { IO::File->new( "file$_", 'w' ) } 0..9;

$files[2]->print( "writing to third file (file2)\n" );
3 голосов
/ 10 января 2010

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

my @list_of_file_handles;
foreach my $filename (1..10) {
    open my $fh, '>', '/path/to/' . $filename;
    push $list_of_file_handles, $fh;
}

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

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