相変わらず仕事では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で作る。
何がどっちにあるかいつも忘れるので表にした pic.twitter.com/aeuuBiY3z1
— 構造体移し替え業 (@mackee_w) 2021年3月27日
背中はこんな感じにしようと思った。どちらかというと背中の方がわかりやすい。
こっち https://t.co/tFdfkgrYaR よりも実用的な方 pic.twitter.com/JM41aUAN33
— 構造体移し替え業 (@mackee_w) 2021年3月27日
ちなみにこんな感じでレイヤーで分けている。
Tシャツにする
Tシャツは上記ツイートと同じsuzuriで作った。
suzuri.jp
パーカーも作った。
suzuri.jp
ただ、思ったのはこれを着てどっちがどっちかわからなくなって見ようと思った時に、自分の胸からお腹を見ると逆になっているので見づらいと思う。なので、同僚などに自分を見てもらって、どっちがどっちか教えてもらおうと思う。