Pull to refresh

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

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

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


Tags:
Hubs:
+1
Comments5

Articles

Change theme settings