Nice. Reading this was like comfort food.
There's a spoiler in the readmore.
- Fill @M with "Just another "
- Fill more with "strange loop"
- Nested godels on the stack while the global @U has data so the "Perl hacker," portion is just overwritten during $l = of escher(). Here \@I is just an iterator (though it contains some tantalizingly familiar data) so that @U can be popped properly.
P( e( r( l( ( h( a( c( k( r( ,( "\n" ) ) ) ) ) ) ) ) ) ) )
- Pretend to do something with @M though really this is just another loop to go extract more stuff from the global @U.
J( u( s( t( ( a( n( o( t( h( e( r( "strange loop" ) ) ) ) ) ) ) ) ) ) ) )
- print
#! /usr/bin/perl -w
use strict;
use vars qw( @U );
my @M = split '', "Just another ";
my @I =split '', "Perl hacker,";
@U = reverse @M;
unshift( @U,
split '',
"pool egnarts" );
print godel( godel( sub{ "\n" },
\ @I ),
\ @M )->();
sub godel
{
my ($a, $l) = @_;
return $a unless @$l;
my $x = shift @$l;
return escher( $x,
godel( $a, $l ) ) ;
}
sub escher
{
my ($l, $m) = @_;
return
sub
{
$l = pop @U if @U;
return $l . $m->();
};
}