2014-12-17 3 views
0

Я получаю эту ошибку для строки: while($line =<$fh>) Что это значит и как ее разрешить?Perl: Не ссылка GLOB

Весь код:

use strict; 
use warnings; 
use v5.14; 
use Compress::Zlib; 

my $filename= "example.gz"; 
my $fh= gzopen($filename, "rb"); 

my $line=0; 
my $counter=1; 
my @array=(); 

while($line = <$fh>) { # <-- this line 
    @array= split (' ', $line); 
    my $num = scalar(@array); 
    print "$array[15] $array[1]\n" if ($array[15] eq "word"); 
    $counter++; 
} 

close $fh; 
+2

'gzopen' возвращает объект, а не дескриптор файла. –

ответ

6

Вы должны использовать $gz->gzreadline($line) для чтения строки из архива.

while ($gz->gzreadline($line) > 0) { 
    @array= split (' ', $line); 
... 
1

Как @mpapec указал, Compress::Zlib::gzopen не возвращает дескриптор файла.

Вы можете использовать PerlIO::gzip, чтобы получить более perlish API для чтения .gz файлов:

use PerlIO::gzip; 
open my $fh, "<:gzip", "example.gz" or die $!; 


while(<$fh>){ 
    chomp; 
    … 
} 

И номер строки, как правило, хранится в $., так что вы не должны считать себя.

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