I've found great success using good ol' Text::CSV_XS and reading in say, 10k lines at a time.

UPDATE: I can attest to the speed as I've been dealing with moving several terabytes of image data off of or around on AWS S3, which usually involves dumping an enormous number (40 million) of rows of csv data and having to run through it one way or another.

Three thousand years of beautiful tradition, from Moses to Sandy Koufax, you're god damn right I'm living in the fucking past