Оператор use является специальным, он не работает как вызов функции.Он выполняется во время компиляции, в отличие от большинства операторов, и анализирует оставшуюся часть оператора с уникальным синтаксисом, а именно: имя модуля должно быть голым, и после него может быть необязательная версия модуля, за которой следует список аргументов.
Просто use Tk;
уже сгенерирует исключение, если Tk не найден, вам не нужно выполнять какую-либо собственную проверку.Если вы хотите настроить сообщение об ошибке, вы можете загрузить его в оператор времени выполнения с require и перехватить исключение, но вам действительно следует включить содержимое @INC
или исходное сообщение об ошибке, которое содержит это,для отладки, где должен быть найден модуль:
use strict;
use warnings;
BEGIN {
unless (eval { require Tk; Tk->import; 1 }) {
die "You don't have the Tk module installed: $@";
}
}
Зависимости для распределения CPAN указываются в метаданных и сценарием настройки для распространения, это гарантирует, что они устанавливаются, когда пользователь пытается установить ваш дистрибутив склиент CPAN.См. http://blogs.perl.org/users/neilb/2017/05/specifying-dependencies-for-your-cpan-distribution.html. Для кода, распространяемого за пределами CPAN, cpanfile предоставляет формат для указания зависимостей, которые могут быть легко установлены пользователем с помощью cpanm .