我需要改变我的例行程序并将最终的输出文件进行 gzip 压缩。我试图找出对在 perl 子例程中调用的已处理文件进行 gzip 压缩的最佳方法是什么。
例如,我有一个创建文件 (extract_data) 的子例程。
这是主循环和子程序:
foreach my $tblist (@tblist)
{
chomp $tblist;
extract_data($dbh, $tblist);
};
$dbh->disconnect;
sub extract_data
{
my($dbh, $tblist) = @_;
my $final_file = "/home/proc/$node-$tblist.dat";
open (my $out_fh, '>', $final_file) or die "cannot create $final_file: $!";
my $sth = $dbh->prepare("...");
$sth->execute();
while (my($uid, $hostnm,$col1,$col2,$col3,$upd,$col5) = $sth->fetchrow_array() ) {
print $out_fh "__my_key__^A$uid^Ehost^A$hostnm^Ecol1^A$col1^Ecol2^A$col2^Ecol3^A$col3^Ecol4^A$upd^Ecol5^A$col5^D";
}
$sth->finish;
close $out_fh or die "Failed to close file: $!";
};
我是在 main 中还是在 sub 中执行 gzip?这样做的最佳方法是什么?
那么我的新文件将是
$final_file =/home/proc/$node-$tblist.dat.gz
谢谢。
最佳答案
我知道有一些模块可以在不使用外部程序的情况下做到这一点,但是由于我对如何使用 gzip
的理解比我对如何使用这些模块的理解要好得多,所以我只是打开了一个 gzip
的进程并称之为一天。
open (my $gzip_fh, "| /bin/gzip -c > $final_file.gz") or die "error starting gzip $!";
...
while (... = $sth->fetchrow_array()) {
print $gzip_fh "__my_key__^A$uid^Ehost^A$hostname..."; # uncompressed data
}
...
close $gzip_fh;
关于perl - 创建 gzip 文件的最佳方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5173503/