我正在尝试使用IO :: Uncompress :: Gunzip模块。根据它的文档,我应该能够提供数组引用的输出变量,以便将结果推送到该数组(documentation here)。当我执行以下操作时:
my $blah = [];
gunzip $blah_gz => $blah or die("gunzip failed: $GunzipError\n");
Gunzip只是将包含文件所有行的单个标量推送到$ blah,基本上将其第一个elem作为标量引用。难道我做错了什么?这是一个错误吗?它是否需要行为?无论是什么,它都很烦人。
答案 0 :(得分:2)
这正是它应该做的事情。根据文档,为输出提供数组引用将解压缩内容,然后将其推送到提供的数组。
也许您认为它应该做的是将未压缩输出的行放入您的数组中?如果你想要这样的话:
gunzip $blah_gz => \ $a_scalar_var or die "blah...\n";
my @contents = split($/, $a_scalar_var);
请注意,内容不会包含尾随新行,因此您在处理时不需要chomp
每行,但您必须使用say
或执行类似{ {1}}当你去打印出来时。
如果您的内存不足,并且基本上不想保留三份数据副本,print $_, "\n"
和$blah_gz
不会超出范围(例如,当您从执行解压缩的函数返回),您可以添加:
$a_scalar_var
生成undef $blah_gs;
undef $a_scalar_var;
后。