2017年6月5日月曜日

Perl 「Wide character in print」 エラーに即時対応する。

Perlで華麗に日本語を扱う::モジュール篇

理由/原因には興味はないので必要ならググってもらうとして、

Ubuntuなどで ja_jp.UTF8 など(SHIFT_JISじゃあるまいに)を使っているのに発生して、Cpanモジュールなどが原因の場合、自分のスクリプトを書き換えずに、モジュールの方を書き換えています。

エラーでは行数が表示されますが、それは無視。当該hoge.pmに
#以下を追記
use utf8::all;

#libutf8-all-perl のインストールが必要です。
#sudo apt install libutf8-all-perl

arch系はcpan コマンドで導入しました。



自分の場合はこれでうまく対処できなかったことはありません。とても重宝しています。
試して損はないので考慮してみださい。とにかくコードが短く書けます!!
※問題があるモジュールがひとつありましたが、CPANモジュールまるごと差し替えました。何だったか覚えてません。
●オリジナルを書き換えるのがいやなら、ユーザーのモジュールパスにコピー。
●書き換えたコピーが優先になれば、書き換えたほうが先に使われる。
●オリジナルに戻したくなれば、ユーザーのモジュールパスから消せばよい。

別言すれば、エンコードだのデコードだのはばからしいので考えたくもないのでした。
とても便利なのでもっと知ってほしいです。Printするだけならエラーを無視という手も通じる場合がありますが、日本語を含む名前のファイルを自動生成するスクリプトなどの場合はとんでもないひどい文字化けだったりしますから、この呪文一行で解決するなら安いものです。

以前はご多聞にもれず、私もエンコードだの、デコードだの、UTF8フラグをごにょごにゅするだの、ばかげたコードを書いていました。こんな非生産的な行為を「みんな」やっているんだろうか? とふと疑問になったのです。暇じゃないだ。

CPANでUTF-8という文字列で検索できるモジュールを全部(ほんとうに全部)試してたどり着きました。このモジュール紹介している日本語記事は執筆時点で私だけみたいですが、ほんと便利です。

それはそうと、Python3でも小物を作るのですが、Unicode文字が自在に使えて便利ですよね(その意味で最高!!)。

Perlでもこのモジュールlibutf8-all-perlを組み込むと変数に日本語ユニコード文字が使えます。使っています。このように、長文の文章ヒエラルキーに自動番号付けや整形を自動で行うPerlスクリプトを書いているのですが、わかりやすくていいです。ちなみに、Perl内で 自己紹介; とすると日本語が含まれているスクリプト名が表示される関数モジュールなんかを書いてます。日本語大好きです。

my 章
my 節
my 項

みたいにです。 3年前ぐらいにubuntuのインストール候補になった気がします。

※絵文字領域はだめでした。$🔥 は弾かれます。笑) $🐸 もです。