http://qs321.pair.com?node_id=204798


in reply to PM Obfu

Can you explain a few things I don't understand?

- First thing I don't understand is this way of making
subs (sub'i, sub'p, sub'f) what's the main difference
from the sub i{..}.

- Second, in this line : \;$m.="$/$/$/$/$/$/1; I don't
really get what you are doing there.

- Third, $/$/$/$/$/$/$/";; why ;;?

#!/usr/bin/perl $m=q\$g=59; $s=23; @v=($",$",'.',';','x','X','M'); $t=[map{[(split('',$_))[0..$g]]}reverse+split($/,$m)]; sub'i{ ($b)=@_; $b->[0]=[(0)x($g+1)]; for(@{$b->[0]}){ $_=$#v*(int(rand(7))<3); } for(1..($s)){ @{$b}[$_]=[(0)x($g+1)]; } } sub'p{ ($b)=@_; system($^O=~/MSWin32/ ? 'cls': 'clear'); $str=''; for $r(reverse(0..$s)){ for $c(0..$g){ $str.=($t->[$r][$c]eq$"?$":@v[int $b->[$r][$c]]); }$str.=$/; } print $str; } sub'f{ ($x)=@_;$b=[];i($b); for $r(1..($s-1)){ for$c(1..($g-1)){if(int(rand(2))){ $v=0;for$ri(-1..1){ for$ci(-1..1){ $v+=$x->[$r+$ri][$c+$ci]; } } $b->[$r][$c]=$v/9; }else{ $b->[$r][$c]=$x->[$r-1][$c];}}} return $b; } $z=[]; i($z); p($z); while(1){ $z=f($z); p($z); } \;$m.="$/$/$/$/$/$/1; $/$/$/$/$/$/$/";; s//$m/; s/$"//g; s|$/||g; eval

Replies are listed 'Best First'.
Re: Re: PM Obfu
by Felonious (Chaplain) on Oct 12, 2002 at 19:07 UTC
    1) sub'i{} means the same as sub main::i {}, in this case it's used to get rid of the space (important because spaces are used as a mask).
    2 and 3) these serve as filler to make the code rectangular and for tweaking the position of the mask over the output.

    [TINPC@perlcabal.com shh]$ su real