quineの履歴
自分自身を吐き出すコードのとこ
以下のような構成でつくると自己生成するコードになる
コードの前半部
コード後半部埋め込みリテラル
コード後半部
mainコード
前半部を出力
後半部リテラル内容をリテラル形式に変換して出力
後半部をリテラルから出力
ユーティリティコード
リテラル形式変換
...
PHP版quine
<?php $str = array( 'echo "<?php\n\$str = array(\n";', 'array_walk($str, \'hoge\');', 'echo ");\n";', 'echo join("\n", $str) . "\n";', 'echo "?>";', 'function hoge($s){echo " \'".str_replace(chr(0x27), chr(0x5c).chr(0x27), $s)."\',\n";}', ); echo "<?php\n\$str = array(\n"; array_walk($str, 'hoge'); echo ");\n"; echo join("\n", $str) . "\n"; echo "?>"; function hoge($s){echo " '".str_replace(chr(0x27), chr(0x5c).chr(0x27), $s)."',\n";} ?>
前半と後半に分けて変換関数で再現。「'」とか「\」を文字コードで扱う