''!~('(?{'.('? ?{..!? } .{.(!???.~(!}{! ^^ ?.){{?})'^'{!){~(?)?.!?{!}}!~{!}?}}!{^(^ !???(.)~'^' ~~.(~?)^}^~^){}(.{ ?!^) ^!?!?(()(}?^!'^'! !}!)(({!){!({)~(. ^..({?.{)~){)(!(^ '^' )(?{!{~~{{^ }!())~{ }^!{^)^()~!}!}!^^').'})')
元来、プログラマというのは怠惰なヒトたちであり、少しでも自分の作業がラクになるように色々なプログラムを開発してきたわけでして。
プログラムを書くにしてもできるだけラクに(タイプ数を少なく)、ということで「Code Golf」なんてのが考え出されたのだと思います。
Code Golf
ところで、Acme::EyeDropsという変態モジュールは「記号だけ」でプログラムを書けてしまいます。
http://search.cpan.org/~asavige/Acme-EyeDrops-1.55/lib/Acme/EyeDrops.pm
このAcme::EyeDropsのsightlyメソッドではプログラムを記号に変換できるわけですが、これを使うと記号がたくさん出てきてしまってワケが分かりません。
例:
$ perl -MAcme::EyeDrops=sightly -le 'print sightly({SourceString => "hoge", Regex => 1, Print => 1})' ''=~('('.'?'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'"'.('`'|'(').('`'|'/').('`'|"'").('`'|'%').'"'.'}'.')') $ perl -MAcme::EyeDrops=sightly -le 'print sightly({SourceString => "hoge", Regex => 1, Print => 1})' | perl -l hoge
つまり、ちょっと記号の種類が多すぎるんですよね。
というわけで、もっと少ない種類の記号たちでプログラムが書けるように変換スクリプトを書いてみました。
コレを使うと、"(", ")", "{", "}", "!", "?", "~", ".", "^", "'"の10種類の記号と、改行コードのみでプログラムが書けてしまいます。無駄にアルファベットとかスペースとか"$"とか"@"とか"%"とか使わなくて済むので、とってもラクですね!
基本的な考え方はワンライナー記号化スクリプトを書いた - すぎゃーんメモと同じです!
例:hoge.pl
#!/usr/bin/perl use strict; use warnings; print "hoge\n";
$ ./symbolize.pl hoge.pl ''!~('(?{'.(')^}}!..}{~.!?({.?~{({.(?!.? ((?)~!!~.?.!~~ )( )!{~)~).~~(.}'^'~ ^?.!)!.()}} ).}~!))(!??.^~)!..!~}{}.~!. ~~ (.))}...!!?~?}'^'.^ ?}}{?}?(~!{?~!)!!!}?(!( ^{.}.^?( ~(?{^~~!! (){~~}!}!{.~^'^'{ {!) ((~)^{} ( ){?~^.??}}~^. ((^(.?{~!! !^} ??{(!???( ){}}'^'!!})( {)?.^){!)~?!!~^!{~!!.~!^!!()(^?)))?!^{{~~.!~.}~?(}!))').'})') $ ./symbolize.pl hoge.pl | perl hoge
日本語とかでも問題なく変換できます。
$ echo 'print "ほげ\n"' | ./symbolize.pl ''!~('(?{'.('{{~{(.{'^'~?}~{!~'^'!?(}! {'^'}(})(^!'^')!??.{}').~('{}.^} '^'.~ }~^'^'((!^}?'^'^.??(.'^'?{~^((').('^ )'^'}!~'^'}~}'^' }^'^'^ ~').'})') $ echo 'print "ほげ\n"' | ./symbolize.pl | perl ほげ
この記号化スクリプト自体を記号化してみたらこんなカンジになりました。
このスクリプトを実行することによってもスクリプトの記号化をすることができます。お試しください!
追記2
10種類に収まるのならそれぞれの記号を数字に変換して暗号っぽくしてみるのも面白いかも。
$ ./symbolize.pl japh.pl | perl -pe 'tr/'\''(){}!?.~^/0-9/' > number.txt $ cat number.txt 005810163071081861 655126175645372931654216520909388839245152877675 3942 15633470905163421 7151863757975345884316 90903512898 2398693877 5616 42446133090 1845544179279321473251 966355 102704202 $ cat number.txt | perl -pe 'tr/0-9/'\''(){}!?.~^/' ''!~('(?{'.('~(~?( ?!!()?(.!?}!{.)^{(?!})(?!)'^'^{~~~{^)}!(!)~..?.! {^}) (!?{{}.'^'!(?{})( .(!(~?{.!.^.!{}!~~}{(? ^'^'{!()~^~ ){^~?^{~.. !?(? })}}?({{'^' (~}!!}}(.^).^{)(}.{)!( ^??{!! (').'})') $ cat number.txt | perl -pe 'tr/0-9/'\''(){}!?.~^/' | perl Just another Perl hacker