Special_K has asked for the wisdom of the Perl Monks concerning the following question:
I have the following code segment in a much larger script:
if ($myfile =~ /\.gz$/) { open(MYFILE, "/bin/zcat $myfile |") || die("ERROR: Cannot open $my +file for read: $!\n"); } else { open(MYFILE, "$myfile") || die("ERROR: Cannot open $myfile for rea +d: $!\n"); } my $myfile_timestamp = (stat(MYFILE))[9]; close(MYFILE);
When I run the script that contains the above, I receive the following error at the "close(MYFILE)" line:
gzip: stdout: Broken pipe
But the script runs to completion without any other apparent issues.
If I just copy/paste the above code into a standalone script and hardcode the path to $myfile, the error doesn't occur.
If I add "use autodie;" to the top of the script, the script exits at the "close(MYFILE)" line with the following messages:
gzip: stdout: Broken pipe Can't close filehandle 'MYFILE': '' at myscript.pl line 1014
If I add the following code either before or after the timestamp assignment, the error doesn't occur:
while (<MYFILE>) { chomp($_); }
If I don't close the filehandle, the error doesn't occur and it doesn't seem to cause any other problems in the script.
If I change the assignment to $myfile_timestamp to a constant as opposed to reading an attribute from the filehandle, the error is the same.
Does anyone know what could be causing the broken pipe error? Is there any way I can debug it further? Reading from the pipe seems to provide a workaround but I'm not sure why it's necessary. This same code structure (doing either a standard open/read for a non-gzipped file or a zcat pipe open for a gzipped file) is used elsewhere in the script and doesn't ever give a "broken pipe" error.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: zcat pipe gives "gzip: stdout: Broken pipe" error
by Fletch (Bishop) on Mar 25, 2025 at 16:18 UTC | |
by Special_K (Pilgrim) on Mar 25, 2025 at 20:00 UTC | |
by choroba (Cardinal) on Mar 25, 2025 at 20:46 UTC | |
by Special_K (Pilgrim) on Mar 25, 2025 at 22:00 UTC | |
|
Re: zcat pipe gives "gzip: stdout: Broken pipe" error
by ikegami (Patriarch) on Mar 26, 2025 at 14:17 UTC | |
by NERDVANA (Priest) on Mar 26, 2025 at 14:51 UTC | |
by ikegami (Patriarch) on Mar 26, 2025 at 16:59 UTC | |
|
Re: zcat pipe gives "gzip: stdout: Broken pipe" error
by duelafn (Parson) on Mar 26, 2025 at 13:50 UTC | |
|
Re: zcat pipe gives "gzip: stdout: Broken pipe" error
by cavac (Prior) on Apr 01, 2025 at 13:06 UTC |