IO :: Uncompress :: Gunzip отказывается писать в массив - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь использовать модуль IO :: Uncompress :: Gunzip.В соответствии с его документацией, я должен быть в состоянии предоставить выходную переменную ссылки на массив, чтобы она помещала результаты в этот массив ( документация здесь ).Когда я делаю следующее:

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

Gunzip просто помещает один скаляр, содержащий все строки файла, в $ blah, по существу рассматривая его первый элемент как скалярную ссылку.Я делаю что-то неправильно?Это ошибка?Это желаемое поведение?Что бы это ни было, это раздражает.

1 Ответ

2 голосов
/ 27 июня 2011

Это делает именно то, что должно быть.Согласно документации, предоставление ссылки на массив для вывода приведет к распаковке содержимого, а затем к отправке в предоставленный массив.

Возможно, что вы думали, что это должно сделать, это поместить строки несжатого вывода в ваш массив?Если вы хотите что-то подобное, сделайте:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...