Of course. What I'm currently using is this:
m/([^"']+|(?:"(?:[^"]|\\")*")|(?:'(?:[^']|\\')*'))/g
Which does what I want. I'll look into the \G variant and see if that makes sense in my head (I have occasional problems with wrapping my head around regex stuff). My intent is to split a block of text into a list of elements, alternating between a quoted string (with the quotes) and a non-quoted string.
For example the string
print ( "some stuff", $more_stuff, "final stuff" ); should become this:
@list = (
q/print ( /,
q/"some stuff"/,
q/, $more_stuff, /,
q/"final stuff"/,
q/ );/
)