I used this feature to improve kyle's solution in Re^2: Finding a random position within a long string (Activeperl Build 822). The pattern then looked like

s/(?(?{rand() >= 0.1})(?!))./?/g
and proved to be a lot faster than having the conditional in the replacement part of s///.

However, your pattern will be very slow due to backtracking. Most of the time the $dict{$1} lookup will fail and the regex engine will backtrack. Each word in the string (per /\w+/) will render

length * (1 + length) / 2
matches. For a short question on here on Perlmonks, with say 130 words and an average word length of 4, you'll get 1300 attempted matches against the string. As you see, it quickly gets quite heavy.

lodin


In reply to Re: regex s/// using hash (heavy backtracking) by lodin
in thread regex s/// using hash by oha

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.