Thread Map Verständnisproblem? (26 answers)
Opened by crojay at 2011-06-16 00:28

Linuxer
 2011-06-17 10:54
#149697 #149697
User since
2006-01-27
3888 articles
HausmeisterIn

user image
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!

View full thread Map Verständnisproblem?