http://www.perlmonks.org?node_id=269127


in reply to Re: Re: Writing a CSV Parser/Printer
in thread Writing a CSV Parser/Printer

You have to provide us with line numbers. This can't be done on perlmonks. You can get them with:

perl -pe '$_="$.: $_"' your_input > your_output
I'm not sure how your desired output should look like. Maybe this will help you. It uses RegEx:

use strict; use warnings; while (<DATA>) { my (@fields)= split /, /; foreach (@fields) { if (s/^"((?:[^"\\]|\\.)*)"$/$1/) { #correct tr/\\//d; # No more \ print "$_\n"; } } } __END__ "Perlmonks", "http://www.perlmonks.org", "excellent ;)" "csv", "csv\"xxx", "trall\ala"
Short explanation for the RegEx:

/^"((?:[^"\\]|\\.)*)"$/$1/

^"
matches your field's quotechar at the start of the field
(...)
will "remember" what was matched inside the quotes
(?:...)*
This will match anything in place of the ... and tells the parser that it may apear as often as possible. Even zero times
[^"\\]
will match any character but " and \
|
is an alternative. Either the left or the right part has to match
\\.
Will match any "escaped" character
"$
again your quotechar but now at the end