M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2011年4月 4日 20:58

:encoding(cp932):crlfではなくて、:crlf:encoding(cp932)

このエントリーをはてなブックマークに追加 mixiチェック

初心に帰って、Windows用のCP932エンコーディング(シフトJIS)、改行コードがCR+LFのテキストを書き出すコードを書いているのですけれども、今さら気づいたので。

use utf8;
my $text = "ほげ\nふが";
open my $fh, '>', 'text.txt';
binmode $fh => ':encoding(cp932):crlf';
print $fh $text;
close $fh;
exit;
__END__

だと、実行するときに

Wide character in print at test.pl line 5.

が出るが、

use utf8;
my $text = "ほげ\nふが";
open my $fh, '>', 'text.txt';
binmode $fh => ':crlf:encoding(cp932)';
print $fh $text;
close $fh;
exit;
__END__

だと、実行するときに警告が出ない。

理由は知らない。

なお、こういうときは、

use utf8;
use open OUT => ':crlf:encoding(cp932)';
my $text = "ほげ\nふが";
open my $fh, '>', 'text.txt';
print $fh $text;
close $fh;
exit;
__END__

と、openプラグマ(2行目)で指定しておくと簡単です。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3546

コメントする