<span style="font-family: courier new,monospace;">Nilson, obrigado pela ajuda... e já que você inicio estou com algumas dúvidas, sedo elas :</span><br><br><div><span class="gmail_quote">On 1/2/07, <b class="gmail_sendername">

Nilson Santos Figueiredo Junior</b> &lt;<a href="mailto:acid06@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">acid06@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

On 1/1/07, Solli Honorio &lt;<a href="mailto:shonorio@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">shonorio@gmail.com</a>&gt; wrote:<br>&gt; Já o &quot;Senior Perl Developer&quot; tem que explicar o código :
<br>&gt; s;(?:SEEKING)?;PERLqny~%|fsyx%~tz&amp;;?$^X=~m.\w+$.
<br>&gt; :DEVELOPERS;s&quot;$&amp;&quot;Ktsf&quot;i;s^.^chr ord($&amp;)-5^eg;$\=$/;print||&quot; ;) &quot;<br>&gt; ... e este eu compreendi nada.<br><br>Nem souberam fazer o golf ser cross platform. Fonality--.<br><br>Enfim, basta rodar um &quot;perl -MO=Deparse&quot; no código e o próprio Perl
<br>desobfusca pra você, ele só perde as constantes. Um código equivalente<br>ao acima é o seguinte:<br><br>&nbsp;&nbsp;s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&amp;/ ? $^X =~ /\w+$/ : &#39;DEVELOPERS&#39;;<br>&nbsp;&nbsp;s/$&amp;/Ktsf/i;<br>&nbsp;&nbsp;s/./chr ord($&amp;) - 5;/eg;
<br>&nbsp;&nbsp;$\ = $/;<br>&nbsp;&nbsp;&#39; ;) &#39; unless print $_;<br><br>O golf não é cross platform porque ele assume que a variável $^X vai<br>terminar em &quot;perl&quot;, o que nem sempre vai ser verdade (às vezes, nem<br>mesmo em um Unix isso será verdade).
<br><br>Mas vamos lá, linha a linha.<br><br>&nbsp;&nbsp;s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&amp;/ ? $^X =~ /\w+$/ : &#39;DEVELOPERS&#39;;</blockquote><div><br><span style="font-family: courier new,monospace;">Ah... agora ví o operador ternário &#39;?&#39; que executará o &quot;$^X =~ /\w+$/&quot; ou apenas atribuirá &quot;DEVELOPERS&quot; de acordo com o retorno de &quot;s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&amp;/&quot;, que acredito eu sempre será true.
</span></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Essa linha pode ser quebrada em duas partes:<br><br>&nbsp;&nbsp;s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&amp;/
</blockquote><div><br><span style="font-family: courier new,monospace;">&nbsp;o que significa &quot;(?:SEEKING)?&quot; ? Eu não consegui encontrar alguma coisa sobre este agrupamento.</span><br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Só serve pra colocar a string &quot;PERLqny~%|fsyx%~tz&amp;&quot; na variável $_<br>(ela substitui a string vazia por isso).<br><br>&nbsp;&nbsp;$^X =~ /\w+$/<br><br>Essa parte serviria pra popular a variável especial $&amp; com a palavra
<br>&quot;perl&quot;, porém, sob Windows, ela popula a variável com a palavra &quot;exe&quot;.<br>Isso acontece porque a expressão regular tenta pegar a última<br>seqüência de caracteres alfanuméricos dentro da variável $^X, que
<br>contém o caminho do binário do perl. No Windows, o conteúdo de $^X<br>será algo como &quot;C:\perl\bin\perl.exe&quot; (última seqüência = &quot;exe&quot;) no<br>Linux isso será algo como &quot;/usr/bin/perl&quot; (última seqüência = &quot;perl&quot;).
<br><br>A variável $&amp; será populada com isso porque ela guarda o valor do<br>último match de uma expressão regular. Na prática, seu uso é<br>desaconselhado pois ela infere problemas de performance em todo o<br>aplicativo do seu uso pra frente.
</blockquote><div><br><span style="font-family: courier new,monospace;">Sério ? Eu não tinha este informação de performance... então não é aconcelhável utilizar o $&amp; nos programas ? Deve apenas fazer a atribuição &quot;my $a = $&amp;&quot; !
</span><br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Em seguida, vem a linha:<br><br>&nbsp;&nbsp;s/$&amp;/Ktsf/i;<br><br>Que seriviria pra substituir o &quot;PERL&quot; na string anterior em &quot;Ktsf&quot;
<br>(funciona pois tem /i ou seja, case-insensitive).<br><br>Por fim, vem a substituição propriamente dita:<br><br>&nbsp;&nbsp;s/./chr ord($&amp;) - 5;/eg;<br><br>Que simplesmente substitui cada um dos caracteres pelo caracter de<br>

código 5 unidades menor na tabela ASCII. Por exemplo, o caracter &#39;f&#39;<br>(102) será substituído pelo caracter &#39;a&#39; (97). O lado direito da<br>expressão regular é executado por causa da flag /e.<br><br>Por fim, a linha
<br><br>&nbsp;&nbsp;$\ = $/;<br><br>É apenas o toque final, pra imprimir o \n no final da mensagem. A<br>variável $\ guarda o &quot;output record separator&quot; que é um conjunto de<br>caracteres que sera usado como sufixo de todos os print()s. A variável
<br>$/ é o &quot;input record separator&quot; que contém o caracter \n por padrão.<br><br>Depois, vem um print() que faz com que a mensagem seja impressa na tela.</blockquote><div><br><span style="font-family: courier new,monospace;">
E a mensagem será &quot;Fonality wants you!&quot;.... que meigo hein ?</span> <br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Na seção de Obfuscation do PerlMonks tem alguns bem mais complexos e
<br>difíceis de enteder que esses.</blockquote><div><br><span style="font-family: courier new,monospace;">Temos que começar de algum lugar, e uma das minhas promessas para este ano é estudar estes Obfuscation, e quem sabe no final do ano publicar o meu primeiro código obfuscation :).
</span><br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">-Nilson Santos F. Jr.<br>_______________________________________________
<br>Cascavel-pm mailing list
<br><a href="mailto:Cascavel-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br>