- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl/日本語処理/日本語テキストファイルの操作 - open() へ行く。
- 1 (2007-04-23 (月) 01:17:03)
- 2 (2009-09-07 (月) 05:13:26)
- 3 (2011-01-07 (金) 05:17:57)
日本語ファイルの入出力
ファイルを開く
- use openで指定するか、3つの引数を取るopen()を使うか。
- use openで指定した時は、必ず2つの引数のopen()を使う。でないと、上書きされる。
use open
use open IN => ':utf8'; open my $in, '<utf.txt' or die;
use open IN => ':encoding(euc-jp)'; open my $in, '<euc.txt' or die;
3つの引数を取るopen()
open IN, "<:encoding(euc-jp)", "euc.txt";
open IN, "<:utf8", "utf.txt";
ファイルに書き出す
- 書き出す文字列($text)はUTF8フラグを落としていないと、Perlがwarningを出す。
- (ただし、ファイルにはUTFな文字列がちゃんと書き込まれている。)
- 従って、UTFで出力したい場合でも、下のいずれかの方法でUTFフラグを落としてやる必要がある。
- 書き出す文字列にUTF8フラグがない場合は、何もする必要はない。
use open
use open OUT => ':encoding(shift_jis)'; open my $out, '>sjis.txt' or die; print $out $text;
3つの引数を取るopen()
open my $out, '>:encoding(shift_jis)', 'sjis.txt' or die; print $out $text;
すでに開かれているファイルハンドル(STDIN/STDOUTを含む)にPerlIOレイヤを指定する(binmode)
すでに開かれているファイルハンドル(STDIN/STDOUTを含む)にPerlIOレイヤを指定する。ファイルハンドルレベルでuft8フラグを付けたり落としたり、文字コードを変換する。
use UTF8なスクリプト内で標準入力(出力)を使う
use utf8; binmode STDOUT, ':utf8'; # 'encoding(utf8)'でもよい print "あ 京\n";
↑binmodeを使わなければ「Wide character」のシステムエラーが発生する。
use utf8; binmode STDIN, ':utf8'; while (<>) { chomp; print "[$_]\n"; }
use utf8なスクリプト内で、SJISのテキストファイルを読取り、標準出力へ表示する
use utf8; binmode STDOUT, ':encoding(utf8)'; open my $fh, '<', shift; binmode $fh, ':encoding(sjis)'; while ($row = <$fh>) { print $row; } close $fh;