[SP-pm] Perl Quiz

Gabriel Andrade gabiruh at gmail.com
Wed Feb 2 06:41:41 PST 2011


On Feb 2, 2011, at 9:54 AM, Stanislaw Pusep wrote:

> E nesse caso, vai imprimir o que?
> 
> #!/usr/bin/perl
> eval eval '"'.
> 
> 
>            ('['^'+').('['^"\)").( '`'|')')          
>        .('`'|'.').('['^'/').('{'^ '[' ).'('.        
>      '('."'".('`'^('&')). "'".(('{')^ (( '[')       
>     )).('['^'#'). ('{'^'[').('^'^('`' | '/')).      
>     (('^')^(  '`'|"\.")).(   (       '^')^('`'|     
>   ((    (         '.')))  ))          .( '^'        
> ^ ( '`'|'.')).')'  .('{'^  '['). ('.').(       ((   
> (( (  (   (  '{') ))))))^'[').'('.     "'". ((( '{')
> )^ '.' )."\'".(  '{'^'[')   .('['^'#').(     '{' ^((
>   '[')  )).+(   ';'&'='  ). (('^')^(   '`'| '.'  )).
>   (((    '^'))^(  ( ('`'))| ((    '.' )))   ).')' . 
>   (((  (      "\{")))^        '[').     ( "\.").(   
>   '{'  ^ ((  '['  ))). ('('). (       (( "'"))).    
>    ((                           '!')    )."'".(     
>   '{'                     ^'[' ).''.  ('['^'#'      
>   ).+(   ( ((  (  '{')) ))^'['  )  .(('^')^(        
>   "\`"|  (( (  ((  ',') )))))   ).+( '^'^(          
>   '`'|'.')).              "\)".( '{' ^+             
>   "\["). '.'.('{'^'[').'\\'. '"' .((                
>   '\\' )).'\\'.('`'|'.').  '\\'.                    
>    '"'.')'.';'.('!'^'+').'"'                        
>     ;$:='.'^'~';$~='@'

Pros que ainda estão coçando a cabeça (como eu, que ficava quando via códigos assim):

$ perl -MO=Deparse trollface.pl
eval eval qq["print (('F' x 1000) . ('U' x 900) . ('!' x 20) . \\"\\\\n\\");\n"];
$: = 'P';
$~ = '@';

A mágica desse código reside na possibilidade de se realizar operações bitwise sobre string de bits em perl.

'[' ^ '+'  produz 'p'
'[' ^ "\)" produz 'r'
'`' | ')'  produz 'i'

e assim por diante, até formar a string usada no 'eval'. O resto é usar a imaginação e ir inserindo espaços em branco no código pra formar o desenho.

Em python isso não iria dar certo... o parser daria chilique no primeiro parágrafo mal indentado.



More information about the SaoPaulo-pm mailing list