勢いだけの3こすり半劇場!!!
このエントリーは Perl Advent Calender 2014 の2日目の記事です。
Yokohama.pm #12
11/28(金) に開催された Yokohama.pm #12 で LT させて頂こうと思ってたんですが、高知でカツオのタタキ食べる方を優先してしまったためにお蔵寸前のネタを、ここに改めて投下します!!
ちなみにお酒は入ってません!! うぇーい!!
Acme::W
突然ですがみなさん Acme::W はもちろんご存知ですよね!!
もしもわからないという方は、@dameninngenn さんの YAPC Asia 2010 伝説の LT を、ご覧ください!!
草www 生えちゃってるw よwwwwwwwww
Acme::BeerSushi
さて、続いては、@songmu さんの Acme::BeerSushi です!!
こちらは Yokohama.pm #11 の ライブコーディングで発表された モジュールです!!
上の 草ww インスパイアでソースコードを絵文字のビア/寿司で記述しちゃうやつですね!!
すべてが F になる
草ww、ビア寿司ときて「 すべてが F になる 」ですよ!! みなさんもちろんご存知ですよね!! あかりん!!
と言いつつ実は僕はあんまり知りません!! うひーすいません!!
まあとにかく、今年の話題だから(原作は少し前だけど)、乗っからないわけにはいかないじゃないですか!! ネタモジュールに躊躇は不要なんですよ!! え(r
Acme::EverythingBecomes
そんなこんなで書いてみました!! Acme::EverythingBecomes
Perl と言えば、やっぱり Acme!! Advent Calender のハードルぐぐっと下げちゃうぞ!!
モジュールのロジックもだいたい元ネタの Acme::BeerSushi からパクリです!!!うぇーい!!!
とまあ「すべてが F になる」と言われて、だいたいみなさん予想ついてると思いますが、一応なにやるか説明しときますね!!
例えば以下のようなコードで print 1;
というコードのすべてが F になります!!
use Acme::EverythingBecomes;
print Acme::EverythingBecomes->F->encode('print 1;');
# FFFFFFF F FFFF FFFFF F F F FF FFFFFFFFF F FF FFF F F F F FFFFF F F FF FFFFFFF FFFF
さて、もうちょっとコードっぽいものの例も示しますと、以下のような foo.pl があるとします!!
#!perl
use strict;
use warnings;
print 123;
次のようなワンライナーでまるごと F にできますね!!!
$ perl -ML -lne 'print Acme::EverythingBecomes->F->encode($_);' foo.pl > F
意味が分からないですか、うーん、こんなコードに変換されてるってことだよ!!
$ cat F
FFF F F FFFF FFF F F F FF FFFFFFF F F F FFFFF F FFF FF FFFFFFF F FFF FFFFF FFFFF F
FFFFFFF FFF FF FFFFFFF F FFFF FFFFF F FFF FF FFF F F F F FFFFFFF F FFFF FFFFFFF FFF F FFFFFFF F FFF FFFFF FFF F FF FFFFF F F FFFF FFFFFFF FFF F FFFFFFF FFFF
FFFFFFF FFF FF FFFFFFF F FFFF FFFFF F FFF FF FFF F F F F FFFFFFF FFFFFF FFFFF F F F FF FFFFFFF F FFF FFFFF FFFFFFF FFFFF FFF F FF FFFFF FFFFFFF FFFFF F FFFFFF FFFFFFF F FFFF FFFFFFF FFFF
FFFFFFF F F F FFFFFFF F FFF FFFFF FFF F FF FFFFF FFFFFFF FFFFFFF FFF F FFF F F F F FFFFF F F FF FFFFF F FFF FFFFF F FFFF FFFFFFF FFFF
run
メソッドに変換されたコードが書かれたファイル名を渡すと、一気に実行しちゃうよ!!
$ perl -ML -e 'Acme::EverythingBecomes->F->run("./F");'
123
OK, Fine!! ほら、すべてが F になったコードが実行できましたよ!!
三番煎じなりの機能
というわけで、この Acme::EverythingBecomes は完全なる3番煎じなわけですが、後発なりに草でもビール寿司でも F でもまあわりと任意の2文字でなんとでもなる作りになっているのです!! なんという無駄実装!!
例えば、ケンシロウ進数で有名な Acme::Kensiro インスパイアも可能になるわけですね!!
$ perl -ML -e 'print Acme::EverythingBecomes->F(chars=>["た", "あ"])->encode("print 1;");'
あああたたたた あああたたあた ああたあたたあ ああたあああた あああたあたた あた たたたた ああたたたあ あああたああ
あたあ!!!
でもこの機能、実は Acme::BeerSushi でもできたよ!! コードはちゃんと読もうね!! うひぃー!!
ネタモジュールの再開発もシュールでいいんじゃ、ないのー!!? うぇーーーーーい!!!
以上、高知のカツオはうまかったぜよ!!! わーい!わーい!
- このエントリーは Perl Advent Calender 2014 向けに特別なテンションで書かれた記事です。
- 公開翌日にしれっと一部修正されています(主に本当にすべてが F になったあたり)。