ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

いつも調べることをチートシートにしてTシャツにした

相変わらず仕事ではPerlを書いているんですけれど、none とか zip とかそういう便利関数がList::UtilにあるのかList::MoreUtilsにあるのかわからなくて困っていた。

List::Utilっていうのは何かというと、Perlで配列を扱うときに便利な関数集で、コアモジュールなので特に追加でモジュールを入れなくても(CentOSとかのシステムPerlでない限り)使える。

例えばmaxっていう配列(厳密にはリスト)を渡したら最大の値のやつを返してくれる君があるんだけども、こんな感じ。

use List::Util qw/max/;

my $max = max(1..10); # 10

別にこれはList::Utilを使わなくても、こんな感じでsort使えばできるんだけども、

my ($max) = sort { $b <=> $a } (1..10);

firstとかnoneとかは確定したら途中で打ち切ってくれるので自前で書くよりは速いし、そもそもXSだし、名前もわかりやすい。sumとかはmy $total; $total += $_ for ...;ってやればできるけれど、まあなんか$_とかあんまり使いたくないじゃないですか。そういうのを丸っと引き受けてくれて便利。

ところがこれだけだと足りないことが世の中あり、もっといろんな便利関数が実装されているのがList::MoreUtilsです。こっちはコアモジュールではないのでcpanm List::MoreUtilsをやる必要がある。

Pythonでもあるzipって関数がList::MoreUtilsにあったり、after { $_ > $treshold } @arrみたいなのもあって便利。

というわけで普段の暮らしでは、これらを両方使っていくという感じなんですが、List::UtilにあってList::MoreUtilsにないもの、List::MoreUtilsにあってList::Utilにないもの、両方にあるものがあってどっちがどっちだっけとuseを書くときに毎回perldocで調べていました。

毎回調べるのはなんだか無駄だなと思っていたある日のこと。

suzuri.jp

インターネットにこれが流れてきて、なるほどこれはコードの主義主張ですが、もしかしたらチートシートをTシャツにするといちいち調べなくてもいいかもと思ったのでした。というわけで画像を作ってTシャツを作って人生を豊かにしましょう。

List::UtilとList::MoreUtilsの差分を知る

両者はコードを読むとExporterを使って関数を外から使えるようにしていて、@EXPORT_OKに入っているのでこんな感じでワンライナーで生成してみる。

$ diff -u <(perl -MList::Util -E '$"="\n";say "@List::Util::EXPORT_OK";' | sort) <(perl -MList::MoreUtils -E '$"="\n";say "@List::MoreUtils::EXPORT_OK";' | sort)

これでdiffが出る。ちなみにList::MoreUtilsは_XScompiledってやつも出てくるが、これは実際に使える関数ではないので、取り除く。

画像を作る

このままImagerモジュールなどを使って生成したらPerl Hackerっぽいなと思ったけれども、僕はプロプライエタリ野郎なのでAdobe Colorでいい感じの配色を探しつつAffinity Designerで作る。

背中はこんな感じにしようと思った。どちらかというと背中の方がわかりやすい。

ちなみにこんな感じでレイヤーで分けている。

f:id:mackee_w:20210327225258p:plain

Tシャツにする

Tシャツは上記ツイートと同じsuzuriで作った。

suzuri.jp

パーカーも作った。

suzuri.jp

f:id:mackee_w:20210327225517p:plain

ただ、思ったのはこれを着てどっちがどっちかわからなくなって見ようと思った時に、自分の胸からお腹を見ると逆になっているので見づらいと思う。なので、同僚などに自分を見てもらって、どっちがどっちか教えてもらおうと思う。