在Perl中解压缩.Z文件

时间:2016-05-02 05:46:50

标签: perl

我正在尝试找到在Perl中解压缩.Z文件的最佳方法。使用IO::Uncompress:GunzipArchive::Extract都会显示相同的行为。因为这两个报告都没有失败,并且它们确实生成了一个输出文件 - 尽管它们生成的输出文件仍然是一个压缩文件(可以使用Unix gzip -d <filename>解压缩)。

use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
my $status = gunzip 'file.16.Z' => 'file.16' or die "failed: $GunzipError";

use Archive::Extract;
my $ae = Archive::Extract->new(archive => 'file.16.Z');
$ae->extract(to => 'file.16') or die $ae->error;

在Perl中解压缩.Z文件的最佳方法是什么?是仅仅进行系统调用并使用gzip

2 个答案:

答案 0 :(得分:2)

使用过时的 <?php //divide route path echo "<br>" .$route_path."</br>"; $hop = explode(">",$route_path); $hop_count = count($hop)-1; //maximum number of path columns in the database $maxPath=9; $lastIndex = 0; for($i=0; $i<=$maxPath; $i++) { if($i<=$hop_count) { $path[$i] = $hop[$i]; $lastIndex = $i; } else { $path[$i] = null; } } $path[$lastIndex+1] = $router_name; for($i=1; $i<=$maxPath; $i++) { if($path[$i] != NULL) { $hop_route[$i-1] = $path[$i-1].'>'.$path[$i]; echo $hop_route[$i-1].'<br/>'; } else { $hop_route[$i-1] = NULL; } } //inserting into database $sql1 = "INSERT INTO hop (hop_id, hop_1_route, hop_2_route, hop_3_route, hop_4_route, hop_5_route, hop_6_route, hop_7_route, hop_8_route, hop_9_route, hop_count, site_name) VALUES ('', '".$hop_route[0]."', '".$hop_route[1]."', '".$hop_route[2]."', '".$hop_route[3]."', '".$hop_route[4]."', '".$hop_route[5]."', '".$hop_route[6]."', '".$hop_route[7]."', '".$hop_route[8]."', '".$hop_count."', '".$site_name."')"; if ($conn->query($sql1) === TRUE) { //echo "New record created successfully"; } else { echo "Error: " . $sql1 . "<br>" . $conn->error; } 实用程序创建Point = Struct.new(:x, :y) point_a = Point.new(0,0) point_b = Point.new(2,3) class Point def distance_to another_point Math.sqrt((self.x - another_point.x)**2 + (self.y - another_point.y)**2) end end puts point_a.distance_to point_b 文件,而不是gzip。 (.Z比gzip早了近十年。)

如果有办法在Perl中解压缩这些,我就不知道了。使用compress命令。

答案 1 :(得分:2)

.Z个文件未被gzip压缩。他们的Lempel-Ziv用compress编码。它仍然相对流行,文件格式内部(如GIF)和数据存储方案。您使用它的标准库是zlib,它应响铃。我有点困惑,认为IO::Uncompress::Inflate应该有效,但它不是正确的格式。

你也被gunzip甩掉了,因为正如手册页所说,gzip的最新版本是:

  

还能够解压缩压缩的文件      使用compress(1)或bzip2(1)。

但这并不代表IO::Uncompress::Gunzip模块可行。 你的代码大多是正确的。

我认为采用普通短文本文件,使用compress text.txt进行压缩,获取text.txt.Z然后使用AnyUncompress perl模块进行记录是一项简单的任务,或AnyInflate modlue。但实际上我得到了你描述的相同行为,所以看起来不支持这种格式。

perl -MIO::Uncompress::AnyUncompress=anyuncompress,\$AnyUncompressError -e\
'my $z = new IO::Uncompress::AnyUncompress "text.txt.Z" '\
'or die "failed $AnyUncompressError";while(<$z>){print};'