Perl5からPerl6に移行。たまにマルチバイト文字

Perl5からPerl6に既存資産を移行しようとしてはまったところ。

既存資産といってもへなちょこ、へっぽこスクリプトの類です。

echo あいうえお | perl6 -ne 's/^(.**0..3).*$/$0/, print $0 '
#3文字分行頭から取得 substrのほうが楽ですね。そういう話じゃなくて。
#
これに限らず、これまで{1,9}みたいに指定し量指定子を書くと、「..」にしろとかいろいろ怒られるので、そうしますが、まさか、{}そのものを使わない書き方とは思ってもみなかったです。
長年にわたって、(.{1,5})みたいにしていたので。

まとめると、短いperl5スクリプトでも影響は大きいですね。

1)後方参照の番号が変わった。これまで$1としていたのは、$0になる。ずれます。
2)範囲指定はだいたい[..]みたい。[A-Z]が[A..Z]になる。他でも同様に、「..」になった。たぶん一律。
3)これまでと同じ正規表現では通らないことがあるので、新しい仕様は読むべき。(読まないけど)
4)量指定子を使う時、{}は使えない。使わない。Perl6は別物と考えたほうがいいと実感する。

※perl5で文字数カウントを間違えないようするには(自分の場合UTF-8文字で数えるためには)、入力文字がUTF-8だよと教える必要があった。
Perl6は無自覚に使ってもUTF-8で扱ってくれる。つまりデフォルトで3バイトの1文字を3つに分解しようとして自滅したりはしない。たぶん空気のようにUTF-8の文字列が扱える(自分の使っている範囲。たぶんですよ)。

導入バージョン rakudo
This is perl6 version 2015.11 built on MoarVM version 2015.11

ls | perl6 -ne 's/^(.**0..7).*$/$0/, say $0 '

デスクトップあたりで端末開いて、上の一行を実行してみるといいかも。何もファイルは変更しません。
下記はperl5でマルチバイト(日本語)含めて数える場合

ls | perl -Mutf8::all -ne 's/^(.{0,7}).*$/$1/, print "$1\n" '

perl5でマルチバイト文字を扱う場合の劇的推奨。

このモジュールに全幅の信頼をおいています。なんか日本人でこれに言及しているのは自分だけの気がするんですけどね。笑) 便利ですよ。組み込むのも簡単だし。メリットは構文が簡素になるので、さくっと使い捨
てが書けます。「perl "utf8::all"」で検索しても2000件しかないし、ディストリのパッケージそのもののダウンロードだったりするので、ほとんど知られていないのかもしれません。わたしは、数年前UTF-8というキーワードでひっかるcpanパッケージは全部(ほんとうに全部)チェックしたので見つけました。以来ハッピーです。
現在、ubuntuの標準パッケージに含まれています。

以下ディスっているわけではありません!! 職業プログラマーが集まるサイトなどで、えんこーどして、でこーどして、ばいんもーどにして。。。とかよく見かけるんですが。うーん。ややこしいから仕事で間違えているんじゃないの?!

単純にUTF-8の入出力だけするのなら簡単です。その文字列を、区切る、数える、置換する、抜き出すなどなら、このモジュールひとつで、簡素に書けます。ほんとにびっくりです。大好きです。めんどくさいことは大嫌いです。




Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...