Text::CSV_XS does handle embedded new lines indeed, you just have to configure your new object properly using the binary option.
in reply to Re: regular expression (search and destroy)
in thread regular expression (search and destroy)
I quote from the man page:
If this attribute is TRUE, you may use binary characters in quoted fields,
including line feeds, carriage returns and NUL bytes. (The latter must
be escaped as "0.) By default this feature is off.
I find Text::CSV_XS to be a nice solution, I never had problems once I set up object attributes correctly. Performance wise is ligthing speed, especially using the print and getline methods.