perlのコードになっているgifファイル
去年はD言語のコードになっているepsファイルを書いたのでよろしくな.
環境
- This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux-thread-multi
- Version: ImageMagick 6.9.6-6 Q16 x86_64 2016-12-02 http://www.imagemagick.org
- DMD64 D Compiler v2.072.1
gifファイル
qiitaの環境がよくわかりませんが,アップロード時にファイルに変更があるかもしれないので,gifファイルを生成するD言語のソースも書きました.
dman.d
import std.stdio,std.base64;void main(){writeln("GIF89a#\x00X\x00\xf1\x01\x00\x00\x00\x00\xff\xff\xff\xff$$\x00\x00\x00!\xfe%\n;use MIME::Base64;BEGIN{$s=<<'END';");write(cast(string)Base64.decode("ACwAAAAAIwBYAAAC/oyPqcvdAJ1UEARr8JQ65j1pFyKCSSmW5oGS69J+L8xe1UzLmTpXqoezOYAvIsO4QR55D+YSpOQ4WdPhNAplAn3c0A8DEYjH41uTBBYAyOxy1LNVt+dipSVed6/p6pM5U1bHwtdHZbSnhkIWVrbjOFinKHixKPRIGbnDmLKIkpbJ9YfZ6DcaigjGSOqHmljR6NPG8yrnYxPBxaYVticaKrd6Ehh8y6sLMzxp2HtMkVzonEcMKK0sXA0NCTwNiZhNvW197f3z/E2CXY593l15HX6VHg0/JI++7sTsru3NTt0vid4RfPPIPSB4TyCycOJaccPUr2GyWfqaJUTlxxwxlofffs1Rt80joUQFR/IRxc+krF4lVbrhxnEkLXHt6Ih8CPGUKpsHGbrEQimiSaBBP8rK5MXmyioUdOoMQqEpVDQwmHqpOtUSVqhYiFqREoSo161gi1gdWyqJ1RNZejBFG7Ws269c6YbdxcpKhyc1dLB1hIRIjL81vlzq60Iq2zdxGyM+4jix5ByEK/s19CDy47Gh9FYpAAAh/v8K"));write(q"[END
$_=q[print q[import std.stdio,std.base64;void main(){writeln("GIF89a#\x00X\x00\xf1\x01\x00\x00\x00\x00\xff\xff\xff\xff$$\x00\x00\x00!\xfe%\n;use MIME::Base64;BEGIN{$s=<<'END';");write(cast(string)Base64.decode("].encode_base64($s,'').'"));write(q"[END
$_=q['.$_.'];eval};]"~"#\x00;");}';exit];eval};]"~"#\x00;");}
これをdmdでコンパイルして実行すると,標準出力にバイナリが出力されるので,それをファイルに保存すれば,perlのコードになっているgifができます.
dmd dman.d
./dman > dman.gif
file dman.gif
perl dman.gif
perl dman.gif
で標準出力に何が出力されましたか?
上記のD言語のソースと全く同じものが出力されたと思います.
もしもエラーが出たり一致しなかった場合は,ごめんなさい,僕がコード生成をミスったか,windowsのCR問題か,落としたgifが間違ってるか,その他環境の差異かのどれかだと思います.
なので,このgifファイルは,「『このgifファイルを出力するD言語のソース』を出力するperlスクリプト」になっているgifファイルになります.
詳しい説明は面倒なので後で追記します.
興味のある人は適当なテキストエディタでdman.gifを覗いてみてください.