use strict;
use Text::CSV_XS;
use utf8;
use Encode 'encode';
if($^O eq "MSWin32"){
Windowsの場合;
}else{
それ以外の場合;
}
で、cp932形式のファイルの読み込みは
open(DATA, "<:encoding(cp932)", $data_file1) || die "can't open $data_file1: $!";
で、日本語を含むCSVファイルなので
my $csv = Text::CSV_XS->new({binary => 1});
とbinary => 1を指定し、
binmode STDOUT, ":utf8";
でprintで出力するものがUTF8となる。
もっと気を遣うのならば読み込んだファイルが本当にcp932のCSVなのか等チェックするのだろうけれど、そこまではやらなかった。