EmmJay: Regexp-Variablen umgehen

Aloha!

Ich suche nach einer Möglichkeit, die speziellen Standardvariablen
$`
$&
$'

zu umgehen, da die ja angeblich die Regexp langsamer machen.

Ich habe auch im Buch "Reguläre Ausdrücke" von Jeffrey Friedl diese Seite mal gefunden gehabt, besagtes Buch ist aber leider nicht mehr in meinem Besitz...

Im Internet (ja, ich bin lernfähig) hab ich dazu leider noch nichts gefunden und da hier im Forum die Antworten immer so schön schnell kommen, bitte ich euch noch mal um Hilfe. Danke sehr!

EmmJay

  1. hi,

    Ich suche nach einer Möglichkeit, die speziellen Standardvariablen
    $`
    $&
    $'

    zu umgehen, da die ja angeblich die Regexp langsamer machen.

    Soso. Wer sagnt das?

    Also, POST_MATCH, PRE_MATCH MATCH 'umgehen', das geht so einfach nicht. Wohl aber könntest du eine RegEx die bspw. vom string 'erwin' das ermitteln soll was nach 'er' kommt anders gestalten:

    $s = 'erwin';
    $s =~ /er/;     # var1 ---> $'
    $s =~ /er(.*)/; # var2 ---> $1

    Was 'schneller geht' zeigt ein benchmark. Wenn du Lust hast, kannst du das ja mal machen.

    Viele Grüße, Rolf

    --
    50 Millionen Deutsche können nicht richtig HTML!
    1. Soso. Wer sagnt das?

      Also, POST_MATCH, PRE_MATCH MATCH 'umgehen', das geht so einfach nicht. Wohl aber könntest du eine RegEx die bspw. vom string 'erwin' das ermitteln soll was nach 'er' kommt anders gestalten:

      $s = 'erwin';
      $s =~ /er/;     # var1 ---> $'
      $s =~ /er(.*)/; # var2 ---> $1

      Was 'schneller geht' zeigt ein benchmark. Wenn du Lust hast, kannst du das ja mal machen.

      Viele Grüße, Rolf

      Wer das sagt? Besagter Herr Friedl. Der meinte nämlich, sobald _irgendwo_ im Script eine dieser drei Standardvariablen vorkomme, müsse jeder Suchstring komplett einmal kopiert werden, obwohl die einzelnen Bestandteile vielleicht nie wieder gebraucht werden. Und da ich in dem Script bestimmt 10.000 Zeilen überprüfen lasse, wird sich das schon negativ auf die Performance auswirken. Nicht tödlich, aber trotzdem...

      Mir ist inzwischen wieder was eingefallen, aber ich finde immer noch nichts... Irgendwie hat das was mit den Offsets der Fundstelle zu tun, kann ich mich noch erinneren... Die stehen wiederum in irgendeiner Standardvariablen, für die nichts kopiert werden müsse (so stand's zumindest in dem Buch)...

      Ach Mist, dann muss ich's mir scheinbar doch nochmal ausleihen..

      1. Hallo Rolf und EmmJay,

        in perlvar(1) (zumindest für perl 5.8.0) steht:
        'The use of this variable anywhere in a program imposes a con-
        siderable performance penalty on all regular expression
        matches.  See "BUGS".'
        Da hat Jeffrey das her.

        In perlvar(1) sollte auch diese Standardvariable zu finden sein.
        Ich bin beim Überfliegen über @+ und @- gestolpert.
        Ist es das?

        CYa
        GONZO