2011-06-27 6 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"のようにしてください。

メモリが不足していて、基本的に3つのデータコピーを保持したくない場合、$blah_gz$a_scalar_varはスコープから外れることはありません(たとえば、解凍する関数から戻ると)、

undef $blah_gs; 
undef $a_scalar_var; 

@contentsが生成された後で追加できます。

+0

Crud、私はそれを恐れていました。確認していただきありがとうございます。 – Eli

+0

@Eli - 行指向モードが必要な場合は、 'my $ z = new IO :: Uncompress :: Gunzip $ inputfile;を使用してください。 while(<$z>){...} 'または' @lines = <$z>; ' – unpythonic

関連する問題