in reply to Re: reg. expr. multiple substitutions
in thread reg. expr. multiple substitutions

To avoid the quotemeta problem and allow a bit more flexibility, it might make sense to use qr// as described in Regexp Quote Like Operators.

my %subs = ( qr/tag1/ => 'subst1', qr/tag2/ => 'subst2', ... ); $str =~ s[$_][$subs{$_}] for keys %subs;

#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Replies are listed 'Best First'.
Re^3: reg. expr. multiple substitutions
by BrowserUk (Patriarch) on May 17, 2012 at 15:06 UTC

    That would probably work, but I'm never quite sure that there is any benefit to pre-compiling a regex with qr// if you are going to then interpolate that into the m// or s/// construct to use it.

    With m//, you can do: my $re = qr/.../; $string =~ $re; thus avoiding re-interpolating the compiled regex, but there is no way to do that with s///.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    The start of some sanity?

      My argument is not so much about performance, as it is about avoiding escaping problems and allowing ism modifiers. Since hash keys get stringified, keying off regexes already compromises any benefit from compiling. I would also expect readability would be improved if extensive escaping is necessary.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

        I wasn't talking about performance. If you are going to re-interpolate a qr// compiled regex, whatever escapaing might be required had you not used qr//, would still be required. Either manually, or via quotemeta. Ergo, the qr// would buy you nothing.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        The start of some sanity?

      That would probably work, but I'm never quite sure that there is any benefit to pre-compiling a regex with qr// if you are going to then interpolate that into the m// or s/// construct to use it.

      Especially when the use as a hash key converts it back to a plain string anyway.

      But, what am I missing about the benefit over quotemeta? Iff you want to have a replacement like 'a[0]' => 'a[1]', you either have to run it through quotemeta or escape it by hand if you want to use qr//, don't you?

        Iff you want to have a replacement like 'a[0]' => 'a[1]', you either have to run it through quotemeta or escape it by hand if you want to use qr//, don't you?

        Exactly my point. I do not see the benefit of qr// for this purpose.

        But in the end, without the OP posting some realistic examples, this discussion is pretty much pointless.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        The start of some sanity?