Initialization

After removing comments and adding a little whitespace, we can explain the rest of the program:

"-|=I+X#."; # A nice string in void context
eval reverse ';)1,52,1,2,2,32,97(=)i$,n$,z$,h$,w$,H$,W$(;".#X+I=|-"
';          # default variables initialization
# Read the command-line parameters (but there are none?!)
while (@ARGV) { ${ pop @ARGV } = pop }
do { # A big loop (explained later)
    while (/([a-z])\s*([-\d.]*)/cgi) { ${$1} = $2 if $1 }
    $e = $_;
    $_ = qq#'<$W%;<$H%(<$j%[<$w%|<$h%!<$x%=<$y}_<$A%^<$a%*<$z%:<$n\n]@//^:")%#;
    @c = split //, $00;
    for ( 1 .. $i ) {
        $w *= $z; $h *= $z; $A += $a;
        for ( 0 .. $H * $W - 1 ) {
            ( $U, $R, @0 ) = ( f( $_ % $W, int $_ / $W ), $n );
            ( $p, $q ) = ( $j ? ( $x, $y ) : ( $U, $R ) );
            do { ( $U, $R ) = ( $U * $U - $R * $R + $p, $U * 2 * $R + $q ) }
              until ( ( $U * $U + $R * $R > 4 ) || --$0[0] == 0 );
            print $c[ int( $0[0] * 9 / $n ) ],
                  ++$_ % $W ? $# : "\n";
        }
    }
    sub f {
        ( $w / $W * ( $_[0] - ( $W - 1 ) / 2 ) * cos($A)
        + $h / $H * ( ( $H - 1 ) / 2 - $_[1] ) * sin($A) + $x,
        ( $_[0] - ( $W - 1 ) / 2 ) * -$w / $W  * sin($A)
        + $h / $H * ( ( $H - 1 ) / 2 - $_[1] ) * cos($A) + $y );
    };
    exit if $e =~ /q/;
    BEGIN { push @ARGV, split ' ', $ENV{TPJ} }; # User preferences
    s/}/%X<$X%Y<$Y%/;
    y"=_!'<%:/;[^]@|*)\"({"yAxW= nmHwaCohz:dju";
    print;
  } while (<>)

We have two while loops. Let's explain the short one:

Previous | Next


Copyright © 2000-2001, Philippe "BooK" Bruhat.