Thread Module inventarisieren ohne ExtUtils::Installed
(26 answers)
Opened by bianca at 2013-04-24 11:25
Bin ein kleines Stückchen weiter:
Code (perl): (dl
)
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 #!/usr/bin/perl -w use strict; use warnings; use File::Find; my $scan = sub { my %found; for my $dir (@_) { if (-d $dir) { my $topdir = $dir; find( sub { if (-f $File::Find::name && $File::Find::name =~ /\.pm$/ ) { my $fn = $File::Find::name; $fn =~ s/\Q$topdir//g; $fn =~ s/\//::/g; $fn =~ s/^:://g; $fn =~ s/\.pm//g; $found{$fn} = ($fn =~ tr/://) / 2; } }, $dir ); } } %found; }; print "Beginne mit Modulsuche in '".join(';',@INC)."'\n"; my %found = $scan->(@INC); # erstmal alle Unterverzeichniss einlesen my @modules; foreach my $name (sort {$found{$a} <=> $found{$b}} keys %found) { if ($found{$name}) { # untere Hirarchien nicht mehr inventarisieren, z.B. nur Authen::SASL und nicht Authen::SASL::CRAM_MD5 my @temp = split /::/,$name; my $flag = 0; for (my $z = 0; $z < scalar @temp - 1; $z ++) { if (defined $found{join('::',@temp[0..$z])}) { # z.B. App::Packer::PAR hat nur die dritte Hirarchie $flag = 1; last; } } push @modules,$name if !$flag; } else { push @modules,$name; } } print "Beginne mit Versionsermittlung fuer ".(scalar @modules)." Modul(e)\n"; my (%ver,@fehler); open STDERR,'>',"error.txt"; # hier landen haufenweise Fehlermeldungen, insgesamt 9 KB bei 560 Modulen foreach my $name (@modules) { eval "use $name"; my $v = $name->VERSION; if (defined $v) { $ver{$name} = $v } else { push @fehler,$name; } } foreach my $name (sort {lc $a cmp lc $b} keys %ver) { # hier funktioniert das sort{} schon nicht mehr print "$name -> $ver{$name}\n"; } print "\nFehlerhafte (".(scalar @fehler)." Stueck):\n".join("\n",@fehler)."\n"; Frage: Kann es sein, dass die ganzen geladenen Module meinen Code beeinflussen? Stutzig machen mich die ganzen Fehlermeldungen in error.txt und die nicht sortiere Ausgabe am Ende trotz sort{}. Kann man das Modul nach der Versionsabfrage auch wieder "entladen"? Oder in einen abgeschotteten Bereich laden wo es mein Script nicht beeinflusst? 10 print "Hallo"
20 goto 10 View full thread Module inventarisieren ohne ExtUtils::Installed |