2014/12/02

勢いだけの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 になったあたり)。
サイト内検索