2015-01-28 2 views
1

У меня есть сценарий, который использует Archive::Zip, и я хочу использовать метод membersMatching, но я не могу понять, что мне не хватает.Архив :: Zip membersMatching не удается найти способ в Perl?

я назвал модуль в начале сценария:

use Archive::Zip qw(:ERROR_CODES :CONSTANTS :MISC_CONSTANTS); 

и это блок кода, в котором используется модуль:

while (my $file = readdir(TRIMMED_CELL_DIR)) { 

    #Only if file ends in _1.fastqc.zip (only 1 instance per "trimmed" subdirectory.) 
    if($file =~ /.*\_1\_fastqc\.zip/){ 

     #Extract the file summary.txt and assign it to filehandle SUMMARY_R1. 
     $file = "${trimmedDirectory}/${file}"; 
     print "Loading ZIP file: $file. \n"; 
     my $zip = Archive::Zip->new($file); 
     my @txtFileMembers = $zip->membersMatching('.*\.txt'); 
     foreach my $txtFile (@txtFileMembers){ 
      extractMember($txtFile); 
      open(SUMMARY_R1,"< $txtFile"); 
     } 

    } 

Я получаю ошибку Can't locate object method "membersMatching". .. и я знаю, что это имеет какое-то отношение к этому методу membersMatching, который не экспортируется, но я не знаю, как вызвать его в скрипте. Te CPAN страница Архив :: Zip не говорит ничего, кроме как использовать его так:

membersMatching ($ регулярных выражений) membersMatching ({регулярное выражение => $ регулярное выражение}) Возвращение массива из членов, чьи имена совпадают заданное регулярное выражение в контексте списка. Возвращает количество совпадающих элементов в скалярном контексте.

my @textFileMembers = $zip->membersMatching('.*\.txt'); 
    # or 
    my $numberOfTextFiles = $zip->membersMatching('.*\.txt'); 

Файл загрузки ZIP с функцией Archive::Zip->new($file) работает, поэтому модуль экспортируется, просто не метод memebersMatching ...

+0

Какова остальная часть вашего сообщения? Он также должен сказать «через пакет» Xxx «' – Borodin

ответ

1

Проверьте путь вашего почтового файла ($file). Я думаю, что это не так. Обновите свой код до:

my $zip = Archive::Zip->new(); 
unless ($zip->read('someZip.zip') == AZ_OK) { 
    die 'read error'; 
} 

print "zip contains the following files:\n"; 
print "$_\n" for $zip->memberNames();