Text::CSV_XS' csv function supports most (if not all) of what you want.
In reply to Re: Reading CSV Function by Tux in thread Reading CSV Function by workInProgress12