きっかけ
ヘイシャで開発合宿なるものがあり、そういやPerl6の学習が足りないなと思ったので。
せっかくなのでPerl6 Advent Calendarの14日目にこっそり紛れ込んでみます。
作ったもの
イカ演算子で代入すると、代入された値が墨塗りになります。
あとイカ語しか喋れなくなります。
軽く掘り下げ
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にも存在する。
Perl 6、ネイティブ整数型に対するアトミックな演算子が追加されて ++⚛$var (aka atomic-inc-fetch($var)) とか書けるようになったらしい、絵文字だ https://t.co/MaS5jNlJR6
— ともくんのママ (@uasi) August 21, 2017
そういやイカの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の一部とわりかしネタ被りしていることに気づいたんですが、キニシナイことにします。