Как найти и удалить дубликаты модулей Perl из библиотеки? - PullRequest
6 голосов
/ 11 октября 2011

Я использовал Module :: Build для управления установкой моего модуля и обнаружил, что у меня есть дубликаты версий данного модуля в разных частях библиотеки:

./site_perl/5.14.2/i686-linux/site_perl/Support/Dump.pm
./site_perl/5.14.2/Support/Dump.pm

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

Есть ли способ найти и удалить дубликаты файлов такого рода?Или это из-за того, что я сделал, и могу ли я это контролировать?

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Это возможно потому, что вы добавили / удалили код XS из вашего модуля.Если вы добавили код XS, первый - текущий (хороший), если вы удалили весь код XS, второй - текущий (не хороший).Это вряд ли будет долгосрочной проблемой, поэтому долгосрочное решение может быть ненужным.

Если вы запустите perl -V, вы заметите порядок каждого пути в вашем @INC.Perl, скорее всего, будет иметь каталог i686-linux / site_perl раньше, чем обычный, поэтому ваша версия XS будет загружена, а другая будет проигнорирована.Неважно, синхронизированы они или нет, будет загружен только один.Таким образом, важно то, что если вы удалите весь код XS, чтобы он стал чистым Perl-модулем, вам придется удалить версию XS из вашего дерева.Это редко - когда вы начинаете делать XS, обычно он не удаляется.Даже модули с двойным сроком службы (List :: MoreUtils) сохраняют свой код XS и просто имеют возможность определить, установлен он или нет, и имеют возможность отключить код XS для целей тестирования.Но на самом деле они не избавляются от кода XS.

Скорее всего, вы добавили код XS, чтобы он больше не был чистым perl, и все будет хорошо.

1 голос
/ 11 октября 2011

Почему?Это вызывает проблемы?Определить все файлы из дистрибутива может быть непросто, поэтому попытка удалить установленный дистрибутив скорее вызовет проблему, чем оставить все как есть.

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

0 голосов
/ 01 февраля 2019

Скорее всего, у вас всегда будут дубликаты выглядящих модулей, поскольку модули установлены в одном (или нескольких) из путей, определенных в списке @INC.Если вы проверите версии модулей с cpan -l, вы, вероятно, обнаружите, что они имеют разные версии.Пожалуйста, смотрите этот ответ для более подробной информации.

Однако всегда можно задаться вопросом, почему Perl никогда не предоставлял более вменяемый (и удобный для людей) способ организации и проверки установленных модулей.

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