2010-03-29 3 views
2

У меня есть несколько файлов журналов, как эти:Можно ли читать несколько файлов с помощью одного дескриптора файла в Perl?

  • /var/log/pureftpd.log
  • /var/log/pureftpd.log-20100328
  • /var/log/pureftpd.log- 20100322

Можно ли загрузить их все в один дескриптор файла или мне нужно будет загружать каждый из них отдельно?

ответ

1

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

+0

Спасибо, это было ключевым словом я искал для. – rarbox

5

Один некрасиво хак бы это:

local @ARGV = qw(
    /var/log/pureftpd.log 
    /var/log/pureftpd.log-20100328 
    /var/log/pureftpd.log-20100322 
); 

while(<>) { 
    # do something with $_; 
} 
+1

Используйте специальный дескриптор файла 'ARGV' для неявного открытия каждого файла в @ARGV. –

+0

Это то, что я делаю. Я бы не назвал это «уродливым», но это тоже не красиво. –

+0

Ну, причина в том, что он «уродливый», потому что он хрупкий: любая другая часть вашего кода (или чужого) может сломать этот код, перебирая '@ ARGV'. Для быстрого одноразового скрипта все в порядке. –

1

Это не очень трудно сделать то же самое с другим дескриптором для каждого файла:

foreach my $file (@ARGV) 
    { 
    open my($fh), '<', $file or do { warn '...'; next }; 
    while(<$fh>) 
     { 
     ... 
     } 
    }