More than 1 year has passed since last update.

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ファイル

dman_3.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を覗いてみてください.