in reply to Re^7: Reading zipped files (.gz)
in thread Reading zipped files (.gz)

In the code I am printing the list of files. In that it showing files. But while trying to read it's showing error like this.

[root@ems NSN_SGSN]# perl gun.pl $VAR1 = [ 'generate_ASR_PSR_report.pl.gz', 'generate_nsn_sgsn_report.pl.gz' ]; Couldn't read [gzip -cd "generate_ASR_PSR_report.pl.gz"]: No such file + or directory at gun.pl line 20.
#!/usr/bin/perl use warnings; use strict; use File::Glob ':bsd_glob'; use Archive::Tar; use Data::Dumper; my $cdr_dir="/root/prac/NSN_SGSN"; my @list = bsd_glob('g*.gz'); print Dumper \@list; foreach my $file (@list) { my $cmd = sprintf 'gzip -cd "%s"', $file; open my $fh, $cmd or die "Couldn't read [$cmd]: $!"; while ( my $line = <$fh> ) { print $line; } close $fh; }

Replies are listed 'Best First'.
Re^9: Reading zipped files (.gz)
by Corion (Patriarch) on Nov 18, 2015 at 10:10 UTC

    Sorry, that's my error. The command to open must be:

    my $cmd = sprintf 'gzip -cd "%s" |', $file;

    I think now is a good time to (re)read and understand the documentation for open.

      Is this method is better or using a module is better??? If there is any change in execution time I dont have any objection. My main concern is memory.

        Using this method, your program will read line-by-line from what the gzip program outputs. Maybe you can measure the differences in RAM usage if you decompress data yourself and if you let gzip decompress data.

      It will read all my file into memory. But I think it's not best practice because am dealing with a bit large files. Is there any other way????

        No, you are wrong.

        The above will not read all your file into memory.

        A reply falls below the community's threshold of quality. You may see it by logging in.