$churchill = qq{"If I were your husband," he said, "I should drink
+ it."};
while ($churchill =~ /"(.*?)"/g) {
print $1, "\n";
}
The purpose of the (.*?) is to capture
a quoted part of the string in $churchill.
Beginners usually try (.*) which doesn't work, because
it captures everything from the first quotation mark to the last,
including the non-quoted part in between. So then they ask
how to fix this and are advised to use (.*?)
instead. This does work, but it's much slower than it needs to be.
A faster solution is:
while ($churchill =~ /"([^"]*)"/g) {
print $1, "\n";
}
This says that what you're interested in is a quote character, followed by a sequence of
characters that are not quotes ([^"]) followed
by another quote. The description of what you want is more exact,
and it enables Perl to do the matching more efficiently.
So a good rule of thumb is to avoid .*? wherever possible
and to use something like [^"]* instead when you can.
|