P is for Practical | |
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
For manually writing lexers my favorite idiom is $$s =~ m/\G.../gc. In scalar context it permits to advance in a string $$s I want to lex. If it matches the
current position, it moves past the match, if not, the position is inchanged, \G permits to anchor the match
at the current position.
I could also use $$s = s/^...//. It
does not cost much because the implementation does not
move the string to truncate but just move an internal
pointer.
But this
is immaterial to the following discussion.
A lexer for Parse::Yapp ends up looking like I know that I always match on $$s so why should I restate it at each match. I _had_ to remove these useless $$S ! It took me a long time to realize that I could do it with a typeglob trick : Now $_ is an alias to the string to lex. So I can match on it I and don't need the =~ operator anymore --
stefp In reply to when $$s =~ m/\G.../gc is too verbose by stefp
|
|