Language: Perl Author: Christoph Durr $b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39; Author: Markus Holzer #!/usr/local/bin/perl $a='#!/usr/local/bin/perl%c$a=%c%s%c;printf($a,10,39,$a,39,10);%c';printf($a,10,39,$a,39,10); Author: Robin Houston Note: Last line is blank print<<''x2,"\n" print<<''x2,"\n" Author: Kiriakos Georgiou printf($x,39,$x='printf($x,39,$x=%c%s%c,39);',39); Author njaharve@uwaterloo.ca #!/usr/bin/perl $_=<<'eof';eval $_; print "#!/usr/bin/perl\n\$_=<<'eof';eval \$_;\n${_}eof\n" eof Author: Tushar Samant Note: This will produce itself, and will do so no matter what you set $a to in the beginning. So if the length of $a is n, and the size of the allowed character set is C, then at least C**n out of C**(n+K) strings are self-reproducing Perl programs. $a='X'; print map "\$a='$a'; $_, q($_)", q(print map "\$a='$a';$_, q($_)") Author: Brian Raiter $_=q{$_=q{Q};s/Q/$_/;print};s/Q/$_/;print Author: V Vinay $_=q(print"\$_=q($_);eval;");eval; Author: Brenadn O'Dea $_=q(print qq(\$_=q($_);eval\n));eval Author: John Nolan Note: Command-line quine perl -e '@A = @ARGV;' -e 'print<;\n$s\n";>; print "#!/usr/local/bin/perl\n\$s = q<$s>;\n$s\n"; Author: Daniel F. Boyd #!/util/bin/perl $s=q@#!/util/bin/perl $s=q%c%s%c;printf($s, 64, $s, 64);@;printf($s, 64, $s, 64); Author:Daniel F. Boyd Note: modified slightly to be more universal #!/usr/bin/perl $s = q@($t = $s) =~ s/\045/\100/g; print "#!/usr/bin/perl\n\$s = q%$s%;$t"; @;($t = $s) =~ s/\045/\100/g; print "#!/usr/bin/perl\n\$s = q@$s@;$t"; Author: Allan M. Due Notes-- Perl 5 needed for the use strict. Just remove it for earlier versions. #!/usr/local/bin/perl -w use strict; $_ = q(s|(.*)|print "#!/usr/local/bin/perl -w\nuse strict;\n\$_ = q(",$1,");\n",$1,";\n"|e); s|(.*)|print "#!/usr/local/bin/perl -w\nuse strict;\n\$_ = q(",$1,");\n",$1,";\n"|e; Author: Aythan Avior #!/usr/local/bin/perl $a='#!/usr/local/bin/perl%c$a=%c%s%c;printf($a,10,39,$a,39,10);%c';printf($a,10,39,$a,39,10); Author: Unknown #!/usr/bin/perl @a = ('', 'print($a[$i], "'); @b = ("\n", '", $b[$i]);' . "\n"); @c = ('', 'print($c[$i]); }} reproduce();' . "\n"); @e = ('', '$e\\'); sub reproduce() { for ($i = 0; $i <= 1; $i++) { $e = $e[$i]; print($a[$i], "#!/usr/bin/perl", $b[$i]); print($a[$i], "$e\@a = ('', 'print($e\$a[$e\$i], $e\"');", $b[$i]); print($a[$i], "$e\@b = ($e\"$e\\n$e\", '$e\", $e\$b[$e\$i]);' . $e\"$e\\n$e\");", $b[$i]); print($a[$i], "$e\@c = ('', 'print($e\$c[$e\$i]); }} reproduce();' . $e\"$e\\n$e\");", $b[$i]); print($a[$i], "$e\@e = ('', '$e\$e$e\\$e\\');", $b[$i]); print($a[$i], "sub reproduce() {", $b[$i]); print($a[$i], "for ($e\$i = 0; $e\$i <= 1; $e\$i++) { $e\$e = $e\$e[$e\$i];", $b[$i]); print($c[$i]); }} reproduce(); Author: Unknown Note: Cheating open+0;print<0> Author: Unknown Notes: Technically a cheat #!/usr/bin/perl seek DATA, 0, 0; print ; __DATA__ Author: Phil Abercrombie (phila@tssc.co.nz) Note Another cheat @a=; print @a,@a; __END__@a=; print @a,@a; __END__