Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^3: Regex fun

by ikegami (Pope)
on Dec 15, 2009 at 21:27 UTC ( #812941=note: print w/replies, xml ) Need Help??


in reply to Re^2: Regex fun
in thread Regex fun

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.

Replies are listed 'Best First'.
Re^4: Regex fun
by JadeNB (Chaplain) on Dec 15, 2009 at 21:59 UTC
    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.

        Thanks for the additional paragraphs.

        The OP's supposition implied that variables could be used there. They can't. That's what I said.

        That's not how I read

        I would assume that quantifier cannot be a '\x' variable
        at all—it seems to me specifically to be saying that you can't use a variable there. Do you mean that, since it mentions that you can't use one sort of variable, it implies that you can use others?

        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.

        You certainly can use, at least in the sense of referring to, capture buffers (which I guess means $1 instead of \1?) and Perl variables, like /(.{$1}){$a}/; since their values don't change during the regex match *, the result is the same (as you pointed out) as substituting in their values before running the regex. (Indeed, I think that's exactly what happens internally.) This is just what I meant in Re: Regex fun; so, as I indicated there, I must (still) be misunderstanding you.

        UPDATE: To avoid the appearance of slyly avoiding the bit about the return value of the last (?{ }), I didn't forget about it, but only because I never knew about it. Thanks!

        Another UPDATE: * Ah, this is probably a crucial point! I always assumed that $1 didn't change until the match had completed; but I guess it's more accurate to say that it does change, but that all the interpolation has already happened at that point, so that change is not reflected in the regex. There's my misunderstanding; sorry!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://812941]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2021-05-11 12:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Perl 7 will be out ...





    Results (116 votes). Check out past polls.

    Notices?