Thread Umstieg auf Strawberry-Perl (37 answers)
Opened by jan99 at 2014-05-10 09:53

bianca
 2014-05-13 12:02
#175519 #175519
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Klar. Je nachdem oben noch die Shebang Zeile ergänzen (falls Reg Key nicht gesetzt). Und wenn du das ganze in eine Textdatei ausgeben lässt kann man darin wunderbar suchen.
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
62
63
64
65
66
67
68
69
use strict;
use warnings;
use File::Find;
use ExtUtils::MM_Unix;
use version;

my $regex = qr{[^A-Za-z0-9:_\-\.]};

my $finde_ungueltiges_zeichen = sub {
    my ($string) = @_;
    my $ret = '';
    for (my $z = 0; $z < length($string); $z ++) {
        if (substr($string,$z,1) =~ $regex) {
            $ret = 'ord('.ord(substr($string,$z,1)).') an Pos. '.$z;
            last;
        }
    }
    $ret;
};

# Dateien aufnehmen
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;
                        if ($fn =~ $regex) {
                            print "Der Modulname '$fn' enthält ungültige(s) Zeichen ".$finde_ungueltiges_zeichen->($fn);
                        }
                        else {
                            $found{$fn} = $File::Find::name;
                        }
                    }
                },
                $dir
            );
        }
    }
    %found;
};
my %found = $scan->(@INC);  # erstmal alle Unterverzeichniss einlesen

# Versionen
if (keys %found) {
    my $zeile = 0;
    foreach my $modul (sort {lc $a cmp lc $b} keys %found) {
        my $version = MM->parse_version($found{$modul});
        if (defined $version && $version ne 'undef') {
            $version =~ s/ //g;
            if ($version =~ $regex) {   # probiere vorher noch eine andere Alternative https://www.perl-community.de/bat/poard/thread/18292/167420
                $version = version->parse($version);
            }
            if ($version =~ $regex) {
                print "Für Modul '$modul' '$found{$modul}' enthält der Versionsstring '$version' ungültige Zeichen\n";
            }
            else {
                print "Gefunden: '$modul' Version '$version'\n";
            }
        }
    }
}


Editiert von bianca: use version; ergänzt
Last edited: 2014-05-13 17:18:17 +0200 (CEST)
10 print "Hallo"
20 goto 10

View full thread Umstieg auf Strawberry-Perl