Это чистый модуль Perl без других зависимостей?
Я бы просто упаковал его с моим кодом. Черт возьми, вы можете даже добавить его в свой файл, если хотите.
Если это немного сложнее, то есть необходимо установить дюжину необходимых модулей, и требуется некоторая компиляция, вам придется использовать CPAN для ее загрузки. Существует CPAN :: AutoINC , который предполагает загрузку и установку любых необходимых вам модулей из CPAN, когда модуль требуется, а не по пути @INC
.
Тем не менее, по моему опыту, у вас все в порядке с червями. Пользователь может начать запускать вашу программу, думая, что она запустится всего на минуту, и обнаружит, что он тратит 20 минут на загрузку, компиляцию и тестирование необходимых модулей, когда у них действительно нет времени.
Лучше просто потерпеть неудачу и дать хорошее объяснение того, что требуется. Пользователь может предпочесть запустить cpan
от имени пользователя root, поэтому он доступен для всех на машине. Или, может быть, им нужно попросить системного администратора сделать это за них.
Я обнаружил, что могу сделать что-то вроде этого:
our $missingModuleFlag;
BEGIN {
eval { require My::Mod; };
our $missingModuleFlag = $@ if ($@);
}
[...]
our $missingModuleFlag; #Package Variable -- Value is from above
if ($missingModuleFlag) {
die <<EOM;
ERROR: You are missing module "My::Mod" which is required for
this program. Please use "cpan" to download this module
and install it on this server. If you have no idea what
I am talking about, see http://www.cpan.org/modules/INSTALL.html.
If that doesn't make any sense to you, then ask a system administrator.
EOM
}
Он объясняет, в чем заключается проблема, и что нужно сделать, и дает пользователю выбор: либо продолжить установку, либо попросить кого-то другого сделать это для них.