モダンPerlの記事を読んで、Term::Encodingを知った。
ときには外からどのような入力がくるかわからない場合もありますが,コンソールアプリケーションであれば宮川達彦氏のTerm::Encodingというモジュールを利用すれば標準入出力のエンコーディングを判定できます。
[モダンPerlの世界へようこそ:第32回 Encode:日本語だけ扱えればよいのではなく|gihyo.jp … 技術評論社]
今まで、手動で「cp932」と入力していたのだが、Term::Encodingを使ってやれば自動的に文字コード(エンコーディング)を判別できるではないか、というわけです。
SEE ALSO
とりあえずやってみました。
1
2
3
4
5
6
7
8
9
| # utf8
use 5.8.1;
use strict;
use warnings;
use utf8;
use Data::Dumper;
use Term::Encoding qw(term_encoding);
my $encoding = term_encoding;
print Dumper $encoding;
|
実行結果は以下のとおり。
文字コード(エンコーディング)を示す文字列が得られました。 というわけで、文字コード(エンコーディング)を直接書かずにTerm::Encodingを使って「ハローワールド」を表示してみると以下のようになりました。
1
2
3
4
5
6
7
8
9
| # utf8
use 5.8.1;
use strict;
use warnings;
use utf8;
use Term::Encoding qw(term_encoding);
my $encoding = term_encoding;
binmode STDOUT => ":encoding($encoding)";
print "ハローワールド!";
|
binmodeを使わずに書くと、
1
2
3
4
5
6
7
8
9
| # utf8
use 5.8.1;
use strict;
use warnings;
use utf8;
use Encode;
use Term::Encoding qw(term_encoding);
my $enc = Encode::find_encoding(term_encoding);
print $enc->encode("ハローワールド!");
|
な感じです。