in reply to Creating regex from arrays

Something like this works,

my $re; { local $" = '|'; $re = qr/@results/; }
The $" variable is interpolated between array elements in stringification.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: Creating regex from arrays
by QwertyD (Pilgrim) on Jul 30, 2003 at 02:36 UTC

    I can see that you probably posted this as a TIMTOWTDI alternative to the half-million other posts using join. I would have never thought to do it that way. I wonder: does your method have an advantage over join, or is it just as good?


    Once it's Turing complete, everything else is just syntactic sugar.

      You're right, timtowtdi sitting on my shoulder. I do like that construction, though. IMO, it's more concise and less visually noisy. True, it depends on a trick from the second tier of quote operator details, but I think the sparse notation and localization of $" pretty well telegraph what the trick is.

      I don't know if there is any performance benefit, other than what's obtained from constructing a compiled regex with qr//. That could as well be done with join. I've never benchmarked this.

      A minor refinement of the code, to assign $re where it is declared:

      my $re = do { local $" = '|'; qr/@array/; };
      or, if metacharacters may be a problem,
      my $re = do { local $" = '|'; qr/@{[map {quotemeta} @array]}/; };

      After Compline,
      Zaxo

Re: Re: Creating regex from arrays
by waswas-fng (Curate) on Jul 29, 2003 at 16:06 UTC
    I thought $" was one of the bad vars tht slows down all regex in your app once used?

    -Waswas

      Not that I know of. Are you thinking of $' ?

      $" is defined with a default value of ' ' in stock perl. It is the mechanism which puts spaces between elements in print "@foo";

      After Compline,
      Zaxo

        ack, yes I was thinking of $'. Thanks

        -Waswas