4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perl 6Advent Calendar 2017

Day 14

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

Last updated at Posted at 2017-12-15

きっかけ

ヘイシャで開発合宿なるものがあり、そういや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にも存在する。

そういやイカの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の一部とわりかしネタ被りしていることに気づいたんですが、キニシナイことにします。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?