Thread Map Verständnisproblem?
(26 answers)
Opened by crojay at 2011-06-16 00:28
Zunächst würde ich lexikalische Filehandles verwenden und die 3-Argumente-Form des open().
chomp() akzeptiert Arrays als Argument; anstatt für jedes Element einzeln chomp() aufzurufen, würde ich es nach dem Filtern auf das Ergebnis-Array anwenden. Du gruppierst in Deinen Regex-Pattern viel mit Klammern und fängst dabei Teiltreffer ein; auch wenn es jeweils nicht wirklich notwendig ist. Hier mal (m)eine Variante: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 3-Argument open() ist sicherer; + lexikalischer Filehandle open(my $ifh, '<', $orderConfigFile") or die "Error open file $orderConfigFile ($!)\n"; my @content = <$ifh>; close $ifh; print "ungefilterte groesse des arrays ist " . scalar(@content) . "\n"; my @cleanedContent = # wenn Pattern gefunden, liefere eingefangenen Teilstring; sonst original $_; Einfangen notwendig map { m/->\s*(.*)/ ? $1 : $_ } # keine Leer- oder Kommentarzeilen; Einfangen nicht notwendig grep { ! m/\A\s*(?:#|$)/ } @content; # ein chomp()-Aufruf fuer alle Elemente anstatt für jedes einzeln... chomp @cleanedContent; print "groesse nach filtern des arrays ist " . scalar(@cleanedContent) . "\n"; Dieser Ansatz (des Filterns) war bei meinen Tests ca. 65% schneller als Deiner ;) Es hängt natürlich von Menge und Art ab, ob dies dann wirklich spürbar ist. meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |