Klaus Mock: split

Beitrag lesen

Hallo,

Hui, das ist interessant. Der Algorithmus ist sehr schnell:

Und wenn man ein bißchen herumspielt, geht's auch noch hurtiger;-)
splt1 habe ich weggelassen, weil es IMHO keine vernünftigen Ergebnisse liefert.
regex2, splt2b liefert die gleichen Ergebnisse wie splt3, d.h. auch Nummern wie 17a werden erkannt.
splt2a entfernt auch noch die Leerzeichen zwischen Straße und Nummer, wie es grundsätzlich auch splt2 tun würde, welches allerdings nicht richtig bei 17a arbeitet.

timethese(1000000,
          {
           regex => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = $wohnort =~ m/^([^0-9]+)([0-9]+)$/;
                        },
           regex2 => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = $wohnort =~ m/^([^0-9]+)([0-9].*)$/;
                        },
           splt2 => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = split(/\s*([0-9]+)/,$wohnort);
                        },
           splt2a => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = split(/\s*([0-9].*)/,$wohnort);
                        },
           splt2b => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = split(/([0-9].*)/,$wohnort);
                        },
           splt3 => sub {
                         my $wohnort = 'Dorfstrasse17';
                         my ($str,$hnr) = split(/(?=[0-9])/, $wohnort, 2);
                        }
          }
         );

Benchmark: timing 1000000 iterations of regex, regex2, splt2, splt2a, splt2b, splt3...
     regex:  7 wallclock secs ( 7.29 usr +  0.00 sys =  7.29 CPU) @ 137155.40/s (n=1000000)
    regex2:  9 wallclock secs ( 7.56 usr +  0.00 sys =  7.56 CPU) @ 132257.64/s (n=1000000)
     splt2: 13 wallclock secs (12.16 usr +  0.01 sys = 12.17 CPU) @ 82196.28/s (n=1000000)
    splt2a:  7 wallclock secs ( 7.60 usr +  0.00 sys =  7.60 CPU) @ 131578.95/s (n=1000000)
    splt2b:  7 wallclock secs ( 7.32 usr +  0.00 sys =  7.32 CPU) @ 136593.36/s (n=1000000)
     splt3:  9 wallclock secs ( 8.46 usr +  0.00 sys =  8.46 CPU) @ 118161.41/s (n=1000000)

Ach ja, und alle haben Schwierigkeiten mit 'Platz des 4.Oktober 15';-)

Grüße
  Klaus