我正在尝试使用IO::Uncompress::Gunzip模块。根据它的文档,我应该能够提供数组引用的输出变量,让它将结果推送到该数组(documentation here)。当我执行以下操作时:
my $blah = [];
gunzip $blah_gz => $blah or die("gunzip failed: $GunzipError\n");Gunzip只是将包含文件所有行的单个标量推送到$blah上,本质上将其第一个元素视为标量引用。我做错了什么吗?这是一个bug吗?这是预期的行为吗?不管是什么,都很烦人。
发布于 2011-06-28 01:04:00
这就是它应该做的事情。根据文档,为输出提供数组引用将解压缩内容,然后将其推送到所提供的数组中。
也许您认为它应该做的是将未压缩输出的行放入数组中?如果你想要这样的东西,可以这样做:
gunzip $blah_gz => \ $a_scalar_var or die "blah...\n";
my @contents = split($/, $a_scalar_var);请注意,内容没有尾随的新行,因此在处理它时不需要对每一行执行chomp操作,但在打印输出时必须使用say或执行类似print $_, "\n"的操作。
如果您内存不足,并且不希望保留数据的三个副本,并且$blah_gz和$a_scalar_var不会退出作用域(例如,当您从执行解压缩的函数返回时),您可以添加:
undef $blah_gs;
undef $a_scalar_var;在生成@contents之后。
https://stackoverflow.com/questions/6496241
复制相似问题