open(my $fh, '-|', 'gunzip', '-c', '--', $input_file) or die("Can't start gunzip: $!\n"); while (!eof($fh)) { defined($_ = <$fh>) or die("Error reading from gunzip: $!\n"); ... } close($fh) or die("Can't close gunzip: $!\n"); ($? & 0x7F) and die("gunzip died from signal ", ($? & 0x7F), "\n"); ($? >> 8) and die("gunzip exited with error ", ($? >> 8), "\n");