Toon posts:

[Perl] welke modules zijn er al???

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal...

Wie weet er hoe ik kan kijken welke perl modules er reeds zijn geïnstalleerd?

ik heb gezocht en gekeken, maare kan het niet vinden!
op CPAN staat deze:
http://www.cpan.org/authors/id/MUIR/scripts/find_used_modules.gz
maare deze geeft mij niks meer dan internat server errors!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Ik kijk meestal in m'n Perl path(s) (in mijn geval /usr/libdata/perl/5.00503) welke modules d'r al staan; ze zijn mooi hierarchisch opgebouwd dus dat is een fluitje van een cent. Een andere optie is natuurlijk "find /usr -name '*.pm'" maar dat duurt wel wat langer en aan modules niet in je search path staan heb je natuurlijk weinig.

Verwijderd

Topicstarter
Kheb geen root permissions!

dus watvoor opties heb ik dan?
Ik weet niet echt waar het allemaal staat!
Volgens mij gewoon standaard geïnstalleerd

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op dinsdag 26 maart 2002 10:35 schreef loaded het volgende:
Kheb geen root permissions!
Dat heeft er weinig mee te maken, lijkt me.
Ik weet niet echt waar het allemaal staat!
Dat heb ik je eigenlijk al verteld:
perl -e 'print join("\n",@INC);'

Verwijderd

loaded: Wie weet er hoe ik kan kijken welke perl modules er reeds zijn geïnstalleerd?
Google weet dat, compleet met versie nummer en omschrijving. ;)
code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/perl -w
# pmdesc - describe pm files
# tchrist@perl.com

use strict;
use File::Find  qw(find);
use Getopt::Std     qw(getopts);
use Carp;

use vars (
    q!$opt_v!,        # give debug info
    q!$opt_w!,        # warn about missing descs on modules
    q!$opt_a!,        # include relative paths
    q!$opt_s!,        # sort output within each directory
);

$| = 1;

getopts('wvas')      or die "bad usage";

@ARGV = @INC unless @ARGV;

# Globals.  wish I didn't really have to do this.
use vars (
    q!$Start_Dir!,      # The top directory find was called with
    q!%Future!,      # topdirs find will handle later
);

my $Module;

# install an output filter to sort my module list, if wanted.
if ($opt_s) {
    if (open(ME, "-|")) {
      $/ = '';
      while (<ME>) {
        chomp;
        print join("\n", sort split /\n/), "\n";
      }
      exit;
    }
}

MAIN: {
    my %visited;
    my ($dev,$ino);

    @Future{@ARGV} = (1) x @ARGV;

    foreach $Start_Dir (@ARGV) {
      delete $Future{$Start_Dir};

      print "\n<<Modules from $Start_Dir>>\n\n"
        if $opt_v;

      next unless ($dev,$ino) = stat($Start_Dir);
      next if $visited{$dev,$ino}++;
      next unless $opt_a || $Start_Dir =~ m!^/!;

      find(\&wanted, $Start_Dir);
    }
    exit;
}

# calculate module name from file and directory
sub modname {
    local $_ = $File::Find::name;

    if (index($_, $Start_Dir . '/') == 0) {
      substr($_, 0, 1+length($Start_Dir)) = '';
    }

    s { /         }    {::}gx;
    s { \.p(m|od)$     }    {}x;

    return $_;
}

# decide if this is a module we want
sub wanted {
    if ( $Future{$File::Find::name} ) {
      warn "\t(Skipping $File::Find::name, qui venit in futuro.)\n"
        if 0 and $opt_v;
      $File::Find::prune = 1;
      return;
    }
    return unless /\.pm$/ && -f;
    $Module = &modname;
    # skip obnoxious modules
    if ($Module =~ /^CPAN(\Z|::)/) {
      warn("$Module -- skipping because it misbehaves\n");
      return;
    }

    my    $file = $_;

    unless (open(POD, "< $file")) {
      warn "\tcannot open $file: $!";
        # if $opt_w;
      return 0;
    }

    $: = " -:";

    local $/ = '';
    local $_;
    while (<POD>) {
      if (/=head\d\s+NAME/) {
        chomp($_ = <POD>);
        s/^.*?-\s+//s;
        s/\n/ /g;
        #write;
        my $v;
        if (defined ($v = getversion($Module))) {
            print "$Module ($v) ";
        } else {
            print "$Module ";
        }
        print "- $_\n";
        return 1;
      }
    }

    warn "\t(MISSING DESC FOR $File::Find::name)\n"
      if $opt_w;

    return 0;
}

# run Perl to load the module and print its verson number, redirecting
# errors to /dev/null
sub getversion {
    my $mod = shift;

    my $vers = `$^X -m$mod -e 'print \$${mod}::VERSION' 2>/dev/null`;
    $vers =~ s/^\s*(.*?)\s*$/$1/; # remove stray whitespace
    return ($vers || undef);
}

format  =
^<<<<<<<<<<<<<<<<<~~^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$Module,      $_
.