Мое приложение читает и записывает много средних и больших файлов.Я хотел бы хранить их в формате ZIP.Экономит дисковое пространство и сетевое время.
Один из способов сделать это с помощью этого:
sub fopen {
my $mode = shift;
my $filename = shift;
if ($filename =~ /\.gz$/) {
if ($mode eq "<") {
open(my $fp, "-|", "/usr/bin/gzcat $filename");
#my $fp = gzopen($filename, "rb") ;
return $fp;
}
if ($mode eq ">") {
open(my $fp, "|-", "/usr/bin/gzip > $filename");
#my $fp = gzopen($filename, "wb") ;
return $fp;
}
} else {
open(my $fp, $mode, $filename);
return $fp;
}
}
Затем я могу изменить свой существующий код, просто поменяв местами вызовы на открытие.
Как видно из функции, я также подумал об использовании библиотеки zlib / compress.Проблема в том, что результат не может быть передан как указатель файла.
Есть ли способ сделать это, не включая создание группы дополнительных процессов?