CSV and more generally, xSV, documents have similar quoting problems to the above, so you might look at the module
Text::xSV for pointers I don't know if
Text::xSV will handle quotes only around a portion of a field, but it is a start on the finite state mchine that would handle these sorts of problems.