You are wrong about DBD::CSV. It fully supports newlines embedded in quoted fields. It does this by default, no special actions are required on your part. (I am its maintainer, I should know). If you weren't able to get it to work, I suspect that your data is using different line endings than your code. Please show your data and your code.