TSV と違って引用符内の改行やカンマが面倒くさいのでモジュールを使った方が楽。
CPAN Text::CSV
http://search.cpan.org/~ishigaki/Text-CSV-1.91/
バイナリを含まない PurePerl なので、ダウンロードして必要なファイルをコピーするだけでも動作する。
CSV から 1 行読み込むのは以下となる。
binary => 1 の指定がなぜ必要なのかは分からないが、設定する必要があるって言われてるなら仰せの通りに設定するだけ。 「なんで?」 とか考えない。
getline() は 1 行取得するだけなので、ファイル全体を走査するならループでぶん回す。
ヘッダー行の区別は無いので、ヘッダが含まれるのであればループの前に 1 回だけ getline() するか、ループカウンタ作って 1 回目の読み込みは読み飛ばすとかすればいい。
ハッシュリファレンスで返す getline_hr() もあるが、事前に column_names() でセットする必要あり。
他の Perl は分からないが、ActivePerl には標準で Text::CSV_XS がある。 Text::CSV で作ったスクリプトでも Text::CSV を Text::CSV_XS に置換するだけでもたぶん動く。