Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Mikhail V. Basov                     2:5020/400     15 Mar 2002  21:47:30
 To : All
 Subject : Определить версии установленных в системе модулей
 -------------------------------------------------------------------------------- 
 
 Hi All,
 
 Как определить версии установленных в системе модулей?
      По работе для администрирования приходится писать некоторое количество
 скриптов на Perl. Очень часто возникают глюки связаные с неудачной комбинацией
 версий модулей установленных в системе (свежий пример XML::Twig). Хотелось бы
 написать скрипт печатающий список модулей и их версий установленных в системе.
      Получить список модулей - не проблема. Идея пробегала здесь недавно:
 рекурсивно пройти по каталогам указанным в @INC и найти все файлы с
 расширением .pm. Определить версию пары-тройки модулей тоже не проблема.
 Загрузить, вызвать $mod_name::VERSION. Проблема в том что если попытаться
 загрузить _ВСЕ_ модули установленные в системе - с большой вероятностью
 получаем Segmentation fault.
      Собственно более узкая задача формулируется так: Как загрузить модуль
 (безопасно - если не загрузился - скрипт не прерывается) и затем его
 гарантированно выгрузить освободив память. 'no mod_name' почему-то не
 срабатывает.
      Hаработки:
 -----------------------------------------------------------------------------
 #!/usr/bin/perl
 use File::Find;                                                        
 my (@mod, %done, $dir);                                                
 find(\&get, grep { -r and -d } @INC);                                  
 @mod = grep(!$done{$_}++, @mod);                                       
 foreach $dir (sort { length $b <=> length $a } @INC) {                 
    foreach (@mod) { next if s,^\Q$dir,,; }                             
 }                                                                      
 print "Content-type: text/html\n\n";                                   
 foreach (sort @mod) { s,^/(.*)\.pm$,$1,; s,/,::,g; load_mod($_); }     
 print "Done! ($#mod modules!)\n\n";                                    
 sub get { /^.*\.pm$/ && /$ARGV[0]/i && push @mod, $File::Find::name; } 
 sub load_mod {                                                         
     my ($mod) = @_;                                                    
     print "load $mod : ";                                              
     if ( ! eval "use $mod" ) {                                         
         print "version  ". ${${mod}.'::VERSION'}."\n";                 
         eval "no $mod";                                                
     } else {                                                           
         warn "!!! couldn't load $mod: $@\n";                           
     }                                                                  
     return;                                                            
 }                                                                      
 -----------------------------------------------------------------------------
 
 Михаил Басов
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Определить версии установленных в системе модулей   Mikhail V. Basov   15 Mar 2002 21:47:30 
 Re: Определить версии установленных в системе модулей   Victor Wagner   16 Mar 2002 00:27:47 
 Re: Определить версии установленных в системе модулей   Mikhail V. Basov   17 Mar 2002 17:16:47 
 Определить версии установленных в системе модулей   Bulat Ziganshin   16 Mar 2002 00:50:03 
 Определить версии установленных в системе модулей   Mikhail V. Basov   17 Mar 2002 17:18:49 
 Определить версии установленных в системе модулей   Bulat Ziganshin   17 Mar 2002 18:55:48 
 Определить версии установленных в системе модулей   Andrew Alakozow   16 Mar 2002 17:55:46 
 Определить версии установленных в системе модулей   Mikhail V. Basov   17 Mar 2002 17:20:52 
Архивное /ru.perl/166797ebb0e9a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional