2017年4月20日木曜日

全角数字を半角数字に変換 perl/perl6

全角数字を半角数字にPerlで変換する。3例


たぶんこういうことかな、と。以下フォントによっては判別不能かもしれません。置換前は全角、置換後は半角の数字が指定してあります。

CTRL+ALT+T

#perl5 tr で単純に
perl5 -pe 'tr|[0-9]|[0-9]|'
#perl5 y オプション::sed互換なので歴史的というべきか。
perl5 -pe 'y|[0-9]|[0-9]|'
#perl6では、yオプションは廃止、trのみになる。
perl6 -pe 'tr|[0..9]|[0..9]|'

なれば、trを利用した書き方だけ覚えればいいのではないか。perl6では各種範囲指定も「..」と現代風に切り替わっていくみたいですね。


おまけ:全角数字とメタキャラクター


perl6はデフォルトでは、\dに日本語の全角数字がマッチする。このデフォルトが便利なのか便利でないのかはまだわからない。 「壱」「捌」といったものには流石にマッチしない。さて、うまい利用法はないものか。

ワンライナーであれば6と5を気分と用途に合わせて使い分ければいいのでよい利用方法がそのうち浮かぶかもしれない。 闇雲に置き換えても言葉の意味が正式名から俗称にかわる可能性もあるので行政文書などでは考えた上で使うべきですね。

行政に限らず、第二次を第2次と表記替えしたら、リジェクトされるケースもありますね。

例)perl6で全角数字を食わせてみる。

全角であっても数字はアンダースコアに置き換えるというワンライナー。
$ echo 5壱7 | perl6 -pe 's:g|\d|_|'
_壱_

$ echo 5壱7 | perl5 -pe 's|\d|_|g'
_壱_

$ echo 5壱7 | perl -pe 's|\d|_|g'
5壱7



$ echo 5壱7 | perl -Mutf8 -pe 's|\d|_|g'
5壱7



$ echo 5壱7 | perl -Mutf8::all -pe 's|\d|_|g'
_壱_
$ echo 5壱7 | perl  -CIO       -pe 's|\d|_|g'
_壱_


というデフォルト挙動は覚えておかないととんでもないことが起きるかもしれませんね。
抑止などは公式サイトをご覧ください。perl5 は オプション付きエイリアスです。
気がついたのは、Perlクックブックだったかなで、直截ではないけれど、なんとなく。使えるようになった。

0 件のコメント:

コメントを投稿