Quine を書いてみる、ヒアドキュメントを使わずに

ヒアドキュメントを使わずに Quine を書いてみた。予想どおりヒアドキュメントを使うよりもサイズが大きい。s///;print を使う技ではこれが限界なんだろうか。

$,=chr(39);$_='$,=chr(39);$_=u;s/u/$,$_$,/;print';s/u/$,$_$,/;print
[takeyuki@sunya ~]$ perl e.pl > b.pl; diff e.pl b.pl; wc -c e.pl
67 e.pl

文字列のクオートに、q★★ を使い、★の部分に特殊変数 $; の値であるところの ^\ を使ってみたらだいぶ短くなって、ヒアドキュメント版より短くなった。

$_=q^\$_=qu;s/u/$;$_$;/;print^\;s/u/$;$_$;/;print

^\ の部分は実際には 0x1c 一文字。

[takeyuki@sunya ~]$ perl e.pl > b.pl; diff e.pl b.pl; wc -c e.pl
47 e.pl

30 bytes 台にしないと golfer は名乗れない。