Как я могу извлечь сжатый архив в Perl?

Если Вы добавили B как слушатель A, и A предназначен для переживания B, завершить запрос B никогда не будут называть, потому что существует экземпляр B в A, таким образом, это никогда не будет собираться "мусор". Вы могли обойти это путем хранения ссылки на B в как WeakReference (который не считают ссылкой во время набора гаража), но было бы лучше явно вычеркнуть из списка B от, когда Вам больше не нужен он.

В целом рекомендуется в Java не использовать завершить метод в Java, потому что Вы никогда не можете быть уверены, когда это назовут, и Вы не можете использовать его для вычеркивания из списка себя от другого класса.

7
задан Sinan Ünür 3 November 2009 в 17:13
поделиться

3 ответа

Согласно документации Archive :: Zip , вам лучше использовать Archive :: Extract :

Если вы просто собираетесь для извлечения zip-архивов (и / или других архивов) рекомендуется использовать вместо этого Archive :: Extract, так как он намного проще в использовании и не учитывает специфические для архива функции.

Это интересно, потому что Archive: : Extract сначала попробует Archive :: Zip, а затем вернется к двоичному файлу unzip , если не удастся. Таким образом, кажется, что Archive :: Zip является предпочтительным вариантом.

Archive :: Zip использует Compress :: Raw :: Zlib , который является интерфейсом низкого уровня для системной библиотеки zlib; так что это не чистая реализация Perl, что означает, что по производительности она будет аналогична unzip . Другими словами,

14
ответ дан 6 December 2019 в 09:20
поделиться

Если вы выполните двоичный файл unzip , ваш процесс будет выполнять fork / exec и

  1. создать экземпляр нового процесса
  2. , потребляющего больше памяти (на время порожденного process)

Вам также необходимо указать правильный путь к распаковке . Учитывая все это, я бы сильно предпочел библиотечный подход.

5
ответ дан 6 December 2019 в 09:20
поделиться

Одна проблема связана с памятью. Мы на собственном опыте обнаружили (отказ рабочего веб-сервера), что Archive :: Tar имела утечку памяти. Таким образом, хотя в целом использование модуля вместо системного вызова внешней команды является хорошей идеей (см. Другие ответы для обоснования), вам необходимо убедиться, что в модуле нет ошибок.

1
ответ дан 6 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: