Forum Webscript.Ru
Программирование => Perl => Тема начата: lalex от 07 Июня 2002, 19:05:14
-
Люди подскажите, как в скрипте узнать подключен ли заданный модуль и как узнать имена объектов(если они имеются) этого класса.
-
use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;
Если модуль отсутствует или его версия меньше указанной, интерпретатор выдаст сообщение об ошибке.
-
use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;
eval {
use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;
};
warn $@ if $@;
-
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
if (%DBI::) {
print "DBI is loaded\\n";
foreach (sort keys %DBI::) {
print $_ . "\\n"
}
} else {
print "DBI doesn\'t loaded\\n";
}
Вообщем по-русски хэш %МОДУЛЬ:: содержит методы, имена переменных и все такое модуля МОДУЛЬ. Если этот хэш определен, значит модуль загружен. Очень кстати прикольная штука динамическое ООП получается.
-
Unregistered вот эта ветка в твоем скрипте
else {
print "DBI doesn\'t loaded\\n";
}
абсолютно не нужна. ;)
Если модуль не установлен, то вывалится ошибка уже при use DBI;
-
Как-это не нужна??? Человек спросил можно ли узнать подключен модуль в скрипте??? А не то что установлен ли модуль вообще на машине. Если надо узнать если такой модуль на машине , то ,например, eval {require МОДУЛь} or die \'Sorry...\'.
А про DBI я просто для примера написал. Вот общий случай:
no strict \'refs\';
foreach (qw(Модуль Модуль2 Модуль3)) {
my $module = $_ . \'::\';
if ( %{$module} ) {
print $_ . " is loaded\\n"
} else {
print $_ . " doesn\'t loaded\\n"
}
}
use strict \'refs\';
-
Человек спросил можно ли узнать подключен модуль в скрипте???
;) Даже спорить не буду... Подумал что lalex спрашивал о подключенных модулях в системе...
-
Кстати для Chs.
Твой пример работать не будет. Так как use рассматривается во время компиляции, а eval {} рассматривается во время исполнения. Надо использовать eval "" так как с кавычками как раз рассматриватеся во время компиляции что и надо.
-
Кстати для Chs.
Твой пример работать не будет. Так как use рассматривается во время компиляции, а eval {} рассматривается во время исполнения. Надо использовать eval "" так как с кавычками как раз рассматриватеся во время компиляции что и надо.
Прав. Только все наоборот.:)
-
В смысле наоборот??????
eval{use Not::Module;} при компиляции use Not::Module вызовет ошибку, так как eval {...} будет работать во время исполнения.
eval "use Not::Module" ошибке не вызовет так как во время компиляции будет рассмотрен eval "..." и соответсвенно ошибка будет правильно обработана.
-
а eval {} рассматривается во время исполнения.
eval{use Not::Module;} при компиляции use Not::Module вызовет ошибку
:))
-
Ну все правильно. eval {..} будет работать во время исполнения, в то время как use во время компиляции. Так что произойдет ошибка раньше, чем eval смог бы ее перехватить.
-
Ну все правильно.
"Ну" неправильно. Анализ внутренностей eval {} идет на этапе комиляции, а eval ""; на этапе выполнения. А теперь еще раз медленно и внимательно прочитай все свои постинги в данном треде.
-
# a compile-time error
eval { $answer = }; # WRONG
# a run-time error
eval \'$answer =\'; # sets $@
Признаю свою ошибку.