Поиск по установленным модулям.

    Первое что я выучил в процессе познавания программирования, это что не надо изобретать велосипед. Многое из того что нужно уже написали и умение найти и склеить нужные части не менее важно чем умение писать код. Конечно писать самому интереснее но сейчас не об этом :)

    Perl это кровь интернета а CPAN это очень важная часть этого языка.
    В определенный момент, мне понадобился один из модулей XML. Так как десктоп у меня Debian Lenny(почти тезка) я решил сделать это в debian-way и установил его через apt. Модуль установился вместе со всеми dependencies и тут я понял, что я не обратил внимание на то что он установил. Решив проверить уже установленные модули, я наткнулся на определенную проблему, оказалось что сделать это простой коммандой не так то просто.

    Возможно кому-то это будет полезно. Потребуется модуль File::Find.

    #! /usr/bin/perl -l
    use strict;
    use warnings;
    use File::Find::Rule;
    
    my @seen;
    
    for my $path (@INC) {
            for my $file (File::Find::Rule->name('*.pm')->in($path)) {
                    my $module = substr($file, length($path)+1);  
                    $module =~ s/.pm$//; # убираем из названий окончание файлов
                    $module =~ s{[\\/]}{::}g; # меняем /\ на :: для читабельности.
                    push (@seen, $module); 
            }
    }
    print join("\n", (sort { lc($a) cmp lc($b) } @seen)), "\n"; #сортировка по имени и печать
    
    Разумеется можно пайпить и показывать модули по wildcard. К примеру, допустим что название скрипта: findmodule.pl.
    
    root@debian:~# perl findmodule.pl | grep -i snmp
    SNMP_Session
    SNMP_util
    
    
    

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 5

      0
      Это Вы так смотрите, какие модели установлены?
      А в perl perl -MCPAN -e shell это не посмотреть разве?
      Ну на крайняк webmin умеет показывать список установленных модулей.
        0
        Через сам CPAN, насколько я знаю, нельзя посмотреть только установленные модули, к тому же так быстрее и читабельнее.
        0
        Через сам CPAN, насколько я знаю, нельзя посмотреть только установленные модули, к тому же так быстрее и читабельнее.
          0
          use ExtUtils::Installed;
          $installed = ExtUtils::Installed->new();
          print «Content-Type: text/html\n\n»;
          foreach $module ($installed->modules()){
          printf «Module: %s\t\tVersion: %s
          \n», $module, $installed->version($module);
          }
            0
            хм, интересно будет в его сорсе покопаться.
            Спасибо.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое