Hallo Siechfred,
dann gibt es doch auch bestimmt etwas in die andere Richtung, um den
String ohne Leerzeichen zu filtern. Ich muss mal stöbern...
nun ich habe nichts anderes gefunden, als mit regexp die
Leerzeichen zu entfernen.
Meine endgültigen Lösungen sind also:
my $string = "string 0 string 1 string 2 string 3 string 4 string 5 string 6 string 7 string 8 string 9 ";
Benchmark::cmpthese(-1, {
'substr' => sub { (my $f0 = substr($string, 0, 10)) =~ s/\s+$//;
(my $f1 = substr($string, 11, 10)) =~ s/\s+$//;
(my $f2 = substr($string, 21, 10)) =~ s/\s+$//;
(my $f3 = substr($string, 31, 10)) =~ s/\s+$//;
(my $f4 = substr($string, 41, 10)) =~ s/\s+$//;
(my $f5 = substr($string, 51, 10)) =~ s/\s+$//;
(my $f6 = substr($string, 61, 10)) =~ s/\s+$//;
(my $f7 = substr($string, 71, 10)) =~ s/\s+$//;
(my $f8 = substr($string, 81, 10)) =~ s/\s+$//;
(my $f9 = substr($string, 91, 10)) =~ s/\s+$//;
},
'unpack1' => sub { my $field = [ map /^(.+?)\s+$/, unpack ("a10a10a10a10a10a10a10a10a10a10",$string) ]; },
'unpack2' => sub { my ($f0, $f1, $f2, $f3, $f4, $f5, $f6, $f7, $f8, $f9) = unpack ("a10a10a10a10a10a10a10a10a10a10",$string);
$f0 =~ s/\s+$//;
$f1 =~ s/\s+$//;
$f2 =~ s/\s+$//;
$f3 =~ s/\s+$//;
$f4 =~ s/\s+$//;
$f5 =~ s/\s+$//;
$f6 =~ s/\s+$//;
$f7 =~ s/\s+$//;
$f8 =~ s/\s+$//;
$f9 =~ s/\s+$//;
},
'split' => sub { my $field = [ map /^(.+?)\s+$/, split /(.{10})/, $string ]; },
'regexp1' => sub { my $field = [ map /^(.+?)\s+$/, $string =~ /(.{10})/g ]; },
'regexp2' => sub { my $field = [ map /^(.+?)\s+$/, $string =~ /(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})/ ]; }
});
Rate split2 regexp2 regexp1 unpack1 unpack2 substr
split 25373/s -- -12% -16% -21% -66% -71%
regexp2 28709/s 13% -- -5% -11% -61% -67%
regexp1 30351/s 20% 6% -- -6% -59% -65%
unpack1 32288/s 27% 12% 6% -- -57% -62%
unpack2 74472/s 194% 159% 145% 131% -- -14%
substr 86102/s 239% 200% 184% 167% 16% --
split und regexp1 fallen weg, falls Spalten unterschiedliche
Längen haben sollten.
substr wäre die schnellste Variante.
Greez,
opi
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|