2011-06-27 31 views
1

我正在尝试使用IO :: Uncompress :: Gunzip模块。根据它的文档,我应该能够提供数组引用的输出变量,以便将结果推送到该数组(documentation here)。当我做到以下几点:IO :: Uncompress :: Gunzip拒绝写入数组

my $blah = []; 
gunzip $blah_gz => $blah or die("gunzip failed: $GunzipError\n"); 

gunzip解刚推包含该文件的所有行到$嗒嗒一个标,治疗基本上它的第一个ELEM作为一个标量引用。难道我做错了什么?这是一个错误?这是期望的行为吗?无论如何,这很烦人。

回答

2

这是做它应该做的。根据文档,为输出提供数组引用将解压缩内容,然后将其推送到提供的数组上。

也许你认为它应该做的是把未压缩输出的行放入你的数组中?如果你想这样的事情做:

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不会超出范围(例如,当你从执行解压缩的函数返回时你已经产生@contents

undef $blah_gs; 
undef $a_scalar_var; 

:),您可以添加英寸

+0

Crud,我很害怕那个。感谢您的验证。 – Eli

+0

@Eli - 如果你想要面向行的模式,只需使用'my $ z = new IO :: Uncompress :: Gunzip $ inputfile;而(<$z>){...}或'@lines = <$z>;' – unpythonic