我的应用程序需要读写大量中等到大型文件。我希望将它们存储为压缩格式。这样可以节省磁盘空间和网络时间。
一种实现方法是使用以下方式:
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;
}
}
我可以通过交换open函数的调用来简单地更改我的现有代码。
从这个函数中可以看出,我也考虑过使用zlib/compress库。问题是结果不能像文件指针一样传递。
有没有一种方法可以做到这一点,而不需要创建大量额外的进程?