Wholly crap! You are good... :)
I'm going to study this stuff to see if I can pick up some better skills and help others as well... If it's worth anything, I've found another scenario for the chunk() subroutine that causes it to break... If strings have escaped characters, then things go all whacked out:
function test () {
var a = "James (aka Tachyon) is a \"Perl Saint\" !!!";
var b = "aaaa'bbbb" + 'cccc"dddd' + "eeee\"ffff" + "gggg\'hhhh";
}
I tried modifying chunk() to that it remembers the previous character (and if it were an escape character) so I could treat the current character as just a plain character (and not the end quote)...
sub chunk {
my ($strOutput) = @_;
my (@chunks);
my ($chunk) = 0;
my ($found_quote) = '';
my ($preceded_by_escape) = 0;
for (split //, $strOutput) {
# look for opening quote
if ( /'|"/ and ! $found_quote and ! $preceded_by_escape) {
$found_quote = $_;
$chunk++;
$chunks[$chunk] = $_;
$preceded_by_escape = (/\\/) ? 1 : 0;
next;
}
# look for corresponding closing quote
if ( $found_quote and /$found_quote/ and ! $preceded_by_escape
+) {
$found_quote = '';
$chunks[$chunk] .= $_;
$chunk++;
$preceded_by_escape = (/\\/) ? 1 : 0;
next;
}
# no quotes so just add to current chunk
$chunks[$chunk] .= $_;
$preceded_by_escape = (/\\/) ? 1 : 0;
}
# strip whitespace from unquoted chunks;
for (@chunks) {
next if m/^(?:"|')/; # leave quoted strings alone
s/^[ \t]+|[ \t]+$//g;
}
return @chunks;
}
This seems to work okay... I thought it didn't, but I believe it was bad data... let me know if this helps... (I'd like to do something productive for you today)! :)