Perl > 文字コードとエンコーディング
----
この項目では、Perlにおける文字コードとエンコーディングについて説明します。
utf8プラグマを使用すると、ソースコードがUTF-8であると仮定され、文字列にutf8フラグが立つようになります。また様々な関数や演算子はバイト単位ではなく文字単位で動作するようになります。
use utf8;
例えば、lengthは文字数を返すようになります。
[https://paiza.io/projects/2-RS7aTrF8yt02A7pMc0vg?language=perl utf8プラグマの使用例]:
use v5.20.0;
use utf8;
say length "あいうえお";
no utf8;
say length "あいうえお";
実行結果:
ファイルハンドルへの出力時にutf8フラグを落とすには、binmode関数で、対応するストリームのエンコーディングを指定します。
use v5.20.0;
use utf8;
binmode STDOUT, "encoding(utf-8)";
say "あいうえお";
もしくはEncodeモジュールのencode()関数を用います。
use v5.20.0;
use Encode qw(encode);
say encode('utf-8', "あいうえお");
utf8フラグが付いたまま出力すると、warningsプラグマや-wスイッチが有効な場合（use v5.12 以降は strict が[https://perldoc.jp/docs/perl/5.12.1/perl5120delta.pod#Unicode32improvements 暗黙のstrict]、 use v5.36 は、warnings がディフォルトで有効です[https://perldoc.jp/docs/perl/5.36.0/perl5360delta.pod#use32v5.36 use v5.36]）、次のような警告が発せられます。
Wide character in say at -e line 3.