in reply to need to recognize string literals and ignore then during parsing.

Since you are using the Tk::Text (or some inherited) API, it is simpler to encapsulate the text into logical tags, then parse contents in these tags differently according to tag type. This is the way VIM implements its syntax hilighting. It would be a lot nicer and powerful with Perl's regular expressions.

For example, given the code:

my $foo = "foo's $bar";

first, look for a string opening token (like qw/" ' qq. qr. q. qx./):

my $foo = "foo's $bar"; ^

Then look for a corresponding close token (in this case /(?<[^\\])"/ to find the other end.

my $foo = "foo's $bar"; ^---------->

Mark that part as a string. On a second pass, you might want to look for variables inside each string tag using $text->tagNextrange. (or the ones that evaluate "", qq//, etc)

At the end, you end up with something like the following (ignoring whitespace):

<perlcode> <reserved>my</reserved> <variable>$foo</variable> <operator>=</operator> <string>"foo's <variable>$bar</variable>"</string>; </perlcode>

I hope you got the idea.