Perl:入力,出力ファイルをそれぞれ指定し,データを特定のエンコードで読み込み特定のエンコードで出力するスクリプト

#入力,出力ファイルをそれぞれ指定し,データを特定のエンコードで読み込み特定のエンコードで出力するスクリプト

use encoding “shiftjis”;
binmode STDERR, “:encoding(shiftjis)”;
use Encode ‘decode’, ‘encode’; # use Encode qw/encode decode/; とqw表記することも可能。引用符やカンマを省略できる。

$inputtext = ‘sjis_in.txt’; # 入力元のテキストは Shift JIS
$outputtext = ‘sjis_out.txt’; # 出力先のテキストは Shift JIS

open (IN, ‘< ', $inputtext); # 入力元ファイルを読み込み専用としてオープン open (OUT, '>‘, $outputtext); # 出力先ファイルを書き込み専用としてオープン

$i = 0; # カウンター
while () { # 先ほどオープンした入力用ファイルハンドル IN を指定して,読み込む (標準出力 <> ではない)
$i++; # カウンターを1つ増
$line = decode(‘shiftjis’, $_); # ファイルからの入力は Encode::decode 関数で個別にエンコードを指定する。ここでは shiftjis を指定しているが,入力ファイルのエンコードにあわせ,euc-jp, utf8 なども指定可能。
$line = encode(‘shiftjis’, $i . “\t” . $line); # 出力するデータを指定し, Encode::encode 関数により Shift JIS に変換する。euc-jp, utf8 なども指定可能。
print OUT $line; # 出力用ファイルハンドル OUT に変換結果を書き込む
}
close (IN); # 入力元ファイルハンドルを閉じる
close (OUT); # 出力先ファイルハンドルを閉じる