Когда вы говорите:
use Foo::Bar;
Вы загружаете модуль Foo::Bar
во время компиляции.Таким образом, если вы хотите загрузить свой модуль во время выполнения, вы должны использовать require
:
require Foo::Bar;
. Они своего рода эквивалентны, но есть различия.Смотрите Perldoc на , используйте , чтобы понять полную разницу.Например, require
, используемый таким образом, не будет автоматически загружаться в импортированные функции.Это может быть важно для вас.
Если вы хотите проверить, существует ли модуль или нет, оберните ваш оператор require
в eval
и проверьте, успешно ли eval
.
Я использую аналогичную технику, чтобы увидеть, доступен ли конкретный модуль Perl:
eval { require Mail::Sendmail; };
if ($@) {
$watch->_Send_Email_Net_SMTP($watcher);
return;
}
В приведенном выше примере я попытаюсь использовать Mail::Sendmail
, который является необязательным модулем, если он доступен,Если нет, я выполню еще одну процедуру, которая использует Net::SMTP
:
sub _Send_Email_Net_SMTP {
my $self = shift;
my $watcher = shift;
require Net::SMTP; #Standard module: It should be available
WORD O'WARNING : вам нужно использовать фигурные скобки вокруг eval
утверждение, а не скобки.В противном случае, если require
не сработает, ваша программа завершит работу, что, вероятно, не то, что вы хотите.