Perl6
Perl 6Day 14

Perl6のAcmeモジュールをサクッと作った話

More than 1 year has passed since last update.

きっかけ

ヘイシャで開発合宿なるものがあり、そういやPerl6の学習が足りないなと思ったので。
せっかくなのでPerl6 Advent Calendarの14日目にこっそり紛れ込んでみます。

作ったもの

https://github.com/debility/p6-Acme-Inkling

イカ演算子で代入すると、代入された値が墨塗りになります。
あとイカ語しか喋れなくなります。

軽く掘り下げ

Perl6は独自演算子の定義やオーバーライドが簡単にできる

multi sub postfix:<!>(Int $n) {
  [*] 1..$n;
}

say 8!; # 8! = 40320
say 3!!; # 3!! = 6! = 720

てなことが割と簡単にできる。
後置演算子の場合はpostfix。

演算子にマルチバイトが使える

sub infix:<たす>($a, $b) {
  $a + $b
}

say 8 たす 3; # 11

なんてこともできる。
中置演算子の場合はinfix。

絵文字も使える

絵文字を使った演算子は、coreにも存在する。

そういやイカのemojiあったよねってことで、これも追加。

「<=:=」固有の問題と解法

※ そもそもasciiのみでイカを表すAAが分からないので、こんなのにしたんですが。
そのまま定義しようとするとinfix:<<=:=>で、これは当然ながらsyntax errorに。
どうすんのかなーと公式のドキュメント見てたら
https://docs.perl6.org/language/operators#infix_<

multi sub infix:«<»(Int:D, Int:D)
multi sub infix:«<»(Num:D, Num:D)
multi sub infix:«<»(Real:D, Real:D)

といった感じで、«»で代用できるってことで解決。

せっかくなのでイカ語を喋らせる、というかイカ語しか喋らせたくない

てことでsayとdieをさっくりとオーバーライドしておきました。
sayで喋ってるのは所謂マンメンミです。
マンメンミ参考: http://matiassoonas.com/?p=827

まとめ

というのを一通り作って満足した後、公式Advent CalendarのDay1の一部とわりかしネタ被りしていることに気づいたんですが、キニシナイことにします。