Ich muss mit gzip komprimierte Dateien dekomprimieren und will das momentan mit dem Modul Compress::Zlib machen.
Das Ganze funktioniert eigentlich auch ganz gut ... es funktioniert zu gut: Wenn ich dem Skript eine "falsche" Datei vorwerfe, d.h. eine Datei, bei der sich das Unix Kommando "gunzip" beschwert, daß das keine gz-Datei ist, arbeitet gzreadline munter weiter ohne eine Fehlermeldung (return Wert > 0).
Das Fatale daran: ein Zweck der Komprimierung / Dekomprimierung ist eine Integritätsprüfung, d.h. falls ein paar Bytes verändert wurden (so daß gunzip einen Fehler ausgeben würde), muß das Skript eine Fehlermeldung schreiben.
Ich hab grade keinen Zugriff auf die Maschine, aber hier ein paar Eckdaten:
- Die Perlversion ist so ca. 5.8.3
- Das Betriebssystem HP-UX 11....
Any ideas?
Hier noch der Beispielcode, mit dem ich das Problem auf Ubuntu (Version Schlagmichtot: Wo finde ich die Version bei Ubuntu ...) mit Perl 5.8.8 reproduzieren kann:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use warnings;
use strict;
use Compress::Zlib;
my $file = shift;
my $gz = gzopen( $file, "rb" ) or die "gzopen failed";
my $bytesRead;
my $line;
while( $bytesRead = $gz->gzreadline( $line ) )
{
if( $bytesRead < 0 ){ die "Error: $gzerrno"; }
}
$gz->gzclose();