1
2
3
4
5
6
7
8
9
10
11
12
open(INPUT,"C:\\temp\\input.txt");
my @content = <INPUT>;
close INPUT;
print scalar(@content) . "\n@content\n";
my $cleanedContent = map {
chomp;
m/^->.*/g;
} @content;
print scalar(@cleanedContent) . " --> größe des cleanedContent\n";
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl use strict; use warnings; my $file='C:\temp\input.txt'; open(my $fh,'<',$file) or die("ERROR open $file ($!)\n"); my @content = <$fh>; close $fh; my @cleanedContent = grep { chomp && /^->/ } @content; print scalar(@cleanedContent) . " --> größe des cleanedContent\n";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/perl use strict; use warnings; my $file='C:\temp\input.txt'; my @content; open(my $fh,'<',$file) or die("ERROR open $file ($!)\n"); while ( my $line = <$fh> ) { next if $line =~ m{\A#}; next if $line =~ m{\A\s*\z}; push @content, $line; } close $fh; print scalar(@cleanedContent) . " --> größe des cleanedContent\n";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
open(INPUT, "<$orderConfigFile") or die ("Error open file $orderConfigFile ($!)\n"); my @content = <INPUT>; close INPUT; print "ungefilterte groesse des arrays ist " . scalar(@content) . "\n"; #1. filtere kommentarzeilen und leerzeilen aus #2. danach entferne bei den übrigen das -> #3. resultierende Liste enthält nur noch Regex/Datei my @cleanedContent = map{ my $x = $_; chomp $x; if ($x =~ /(^->.*$)/){ $x =~ s/^(->\s*)(.*)/$2/g; } $x; } grep{!/(^\s*([#].*)?$)/} @content; print "groesse nach filtern des arrays ist " . scalar(@cleanedContent) . "\n";
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";
1
2
3
4
5
6
Rate original linuxer wer_map renee_map+grep wer_map+grep
original 444/s -- -41% -50% -64% -64%
linuxer 757/s 70% -- -15% -39% -39%
wer_map 888/s 100% 17% -- -29% -29%
renee_map+grep 1244/s 180% 64% 40% -- -0%
wer_map+grep 1244/s 180% 64% 40% 0% --
Guest werDas Map lässt sich besser schreiben: map { s/^->\s*(.*)$/$1/ }
Guest werJa erst ab 5.12 nimmt map $_
1
2
3
4
5
6
7
8
9
This is perl 5, version 12, subversion 1 (v5.12.1) built for i686-linux
perl -wE'
@a = qw/ foo bar baz /;
@b = map { s/([a-z])/$1/ } @a;
say for @b;'
1
1
1