http://qs321.pair.com?node_id=812939


in reply to Re: Regex fun
in thread Regex fun

It's simpler than that: The quantifier cannot be variable.
This must mean something other than what it seems (to me) to mean:
$ perl -E 'my $quant = 2; "ab" =~ /.{$quant}/ and say "Matched"' Matched
shows that the ‘length’ of the quantifier can be given by a variable.

Replies are listed 'Best First'.
Re^3: Regex fun
by ikegami (Patriarch) on Dec 15, 2009 at 21:27 UTC

    I didn't say you couldn't build regexps dynamically. I said the quantifier can't be variable. Perl regular expressions don't even have variables, so you couldn't possibly have shown one being used.

    You can't have a quantifier until you have a regexp, and you don't have a regexp until you interpolate anything that needs to be interpolated.

    What's the quantifier in the following?

    $ perl -E 'my $x = "2"; "ab" =~ /.{$x}/ and say "Matched"' Matched

    Are you saying it's different in this one?

    $ perl -E 'my $x = "{2}"; "ab" =~ /.$x/ and say "Matched"' Matched

    What about this one?

    $ perl -E 'my $x = "2}"; "ab" =~ /.{$x/ and say "Matched"' Matched

    In all cases, the quantifier is {2}. No variables is involved. Sure, the regexp is produced from a variable, but that has nothing to do with the quantifier.

    Update: Clarified.

      Perl regular expressions don't even have variables, so you couldn't possibly have shown one being used.

      This is what I first thought you meant, but it didn't make any sense to me. If one distinguishes “regex variables” (variable at regex run-time) from “Perl variables” (constant at each regex run-time *), then, as you (basically) say, the only ones (I think) are the \1 back-references; but, when Hena said

      I would assume that quantifier cannot be a '\x' variable
      you said
      It's simpler than that: The quantifier cannot be variable.
      The only reason I could think of to make this comment is if there were some other sort of variable, but you seem to be saying that there isn't. Did I misunderstand?

      UPDATE: * False, as I finally realised in Re^6: Regex fun.

        The only reason I could think of to make this comment is if there were some other sort of variable

        Or if someone posts an SoPW asking how to make it variable.

        Actually, it was to say that there wasn't "some other sort of variable". The OP's supposition implied that variables could be used there. They can't. That's what I said.

        Aside from that, did you forget about capture buffers, the return value of the last (?{ }) and Perl variables? There's just no way to access them there.

        Update: Added second and third para.