Perl で改行やカンマを含むデータをCSVファイルに書き出す方法

Microsoft エクセル のCSVの仕様

Microsoft エクセルでCSVファイルを読み取る際、カンマで区切られたフィールドがクオート(")で囲まれていた場合、クオートはデータとみなさず、クオートの中身のみを一つのデータ(フィールド)とみなします。

ということで、カンマや改行が出てきたらそのフィールド全体をクオートで囲ってやれば、エクセルは全体を一つのフィールドと見てくれます。

但し、レコード区切の改行が CR+LF なのに対し、フィールド内の改行は LF です。フィールド内の改行に CR+LF を使用すると、余計な半角中黒のようなものが表示されます。

フィールドの値自体にクオート(")が出てきてしまった場合は、さらにその前にクオートを重ねることでエスケープします。
つまり「これは"クオートです」という値を表す場合、フィールドの表記は「"これは""クオートです"」とします。