Автор Тема: Подключенные модули  (Прочитано 4089 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lalex

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Подключенные модули
« : 07 Июня 2002, 19:05:14 »
Люди подскажите, как в скрипте узнать подключен ли заданный модуль и как узнать имена объектов(если они имеются) этого класса.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Подключенные модули
« Ответ #1 : 08 Июня 2002, 01:56:14 »
use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;

Если модуль отсутствует или его версия меньше указанной, интерпретатор выдаст сообщение об ошибке.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Подключенные модули
« Ответ #2 : 10 Июня 2002, 10:19:37 »
Цитировать

use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;

eval {
use МОДУЛЬ;
или
use МОДУЛЬ ВЕРСИЯ;
};
warn $@ if $@;
2B OR NOT 2B = FF

  • Гость
Подключенные модули
« Ответ #3 : 10 Июня 2002, 12:19:29 »
#!/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";
}

Вообщем по-русски хэш %МОДУЛЬ:: содержит методы, имена переменных и все такое модуля МОДУЛЬ. Если этот хэш определен, значит модуль загружен. Очень кстати прикольная штука динамическое ООП получается.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подключенные модули
« Ответ #4 : 10 Июня 2002, 12:44:45 »
Unregistered вот эта ветка в твоем скрипте
Цитировать
else {
print "DBI doesn\'t loaded\\n";
}

абсолютно не нужна. ;)
Если модуль не установлен, то вывалится ошибка уже при use DBI;
The documentations is your friend

  • Гость
Подключенные модули
« Ответ #5 : 10 Июня 2002, 13:04:36 »
Как-это не нужна??? Человек спросил можно ли узнать подключен модуль в скрипте??? А не то что установлен ли модуль вообще на машине. Если надо узнать если такой модуль на машине , то ,например, 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\';

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подключенные модули
« Ответ #6 : 10 Июня 2002, 13:10:37 »
Цитировать
Человек спросил можно ли узнать подключен модуль в скрипте???

;) Даже спорить не буду... Подумал что lalex спрашивал о подключенных модулях в системе...
The documentations is your friend

  • Гость
Подключенные модули
« Ответ #7 : 10 Июня 2002, 13:30:56 »
Кстати для Chs.
Твой пример работать не будет. Так как use рассматривается во время компиляции, а eval {} рассматривается во время исполнения. Надо использовать eval "" так как с кавычками как раз рассматриватеся во время компиляции что и надо.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Подключенные модули
« Ответ #8 : 10 Июня 2002, 13:41:53 »
Цитировать
Кстати для Chs.
Твой пример работать не будет. Так как use рассматривается во время компиляции, а eval {} рассматривается во время исполнения. Надо использовать eval "" так как с кавычками как раз рассматриватеся во время компиляции что и надо.

Прав. Только все наоборот.:)
2B OR NOT 2B = FF

  • Гость
Подключенные модули
« Ответ #9 : 10 Июня 2002, 14:17:24 »
В смысле наоборот??????
eval{use Not::Module;} при компиляции use Not::Module вызовет ошибку, так как eval {...} будет работать во время исполнения.
eval "use Not::Module" ошибке не вызовет так как во время компиляции будет рассмотрен eval "..." и соответсвенно ошибка будет правильно обработана.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Подключенные модули
« Ответ #10 : 10 Июня 2002, 14:46:15 »
Цитировать
а eval {} рассматривается во время исполнения.

Цитировать
eval{use Not::Module;} при компиляции use Not::Module вызовет ошибку

:))
2B OR NOT 2B = FF

  • Гость
Подключенные модули
« Ответ #11 : 10 Июня 2002, 14:53:21 »
Ну все правильно. eval {..} будет работать во время исполнения, в то время как use во время компиляции. Так что произойдет ошибка раньше, чем eval смог бы ее перехватить.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Подключенные модули
« Ответ #12 : 10 Июня 2002, 15:02:45 »
Цитировать
Ну все правильно.

"Ну" неправильно. Анализ внутренностей eval {} идет на этапе комиляции, а eval ""; на этапе выполнения. А теперь еще раз медленно и внимательно прочитай все свои постинги в данном треде.
2B OR NOT 2B = FF

  • Гость
Подключенные модули
« Ответ #13 : 10 Июня 2002, 15:19:19 »
# a compile-time error
eval { $answer = };                 # WRONG

# a run-time error
eval \'$answer =\';   # sets $@

Признаю свою ошибку.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28