QuoteAlgorithm::DiffOld is not installed at /meinpfad/meinscript.pl line xy
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";
2013-04-24T12:05:33 pqein use auf das modul kann nebenwirkungen haben. würde ich nicht machen. es gibt sogar module, die dir den script-quelltext verhunzen (im Acme-namespace z.b.).
2013-04-24T12:05:33 pqdu sortierst numerisch.
2013-04-24T12:20:47 bianca2013-04-24T12:05:33 pqein use auf das modul kann nebenwirkungen haben. würde ich nicht machen. es gibt sogar module, die dir den script-quelltext verhunzen (im Acme-namespace z.b.).
Was kann ich stattdessen machen?
Quote
2013-04-24T12:57:41 pqvorhandene module nutzen wie ExtUtils::Installed oder ExtUtils::MakeMeker (parse_version)
2013-04-24T12:57:41 pqich bezog mich auf zeile 32
2013-04-24T15:14:32 pq
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
#!/usr/bin/perl -w use strict; use warnings; use File::Find; use ExtUtils::MM_Unix; 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) { my $v = MM->parse_version($name); # 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";
Quoted:\arbeit>perl test_modulinventar.pl
Beginne mit Modulsuche in 'C:/strawberry/perl/lib;C:/strawberry/perl/site/lib;C:\strawberry\perl\vendor\lib;.'
Beginne mit Versionsermittlung fuer 560 Modul(e)
Could not open 'Fcntl': No such file or directory at C:/strawberry/perl/lib/ExtUtils/MM_Unix.pm line 2639.
2013-04-24T15:36:21 pqparse_version() braucht den (vollen) dateinamen, nicht den modulnamen.
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; use ExtUtils::MM_Unix; 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}{hirarchie} = ($fn =~ tr/://) / 2; $found{$fn}{pfad_name} = $File::Find::name; } }, $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}{hirarchie} <=> $found{$b}{hirarchie}} keys %found) { if ($found{$name}{hirarchie}) { # 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 (exists $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); foreach my $name (@modules) { my $v = MM->parse_version($found{$name}{pfad_name}); if (defined $v && $v ne 'undef') { $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";
2013-04-24T15:14:32 pq