<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
        <title></title>
        <meta name="GENERATOR" content="OpenOffice.org 2.4  (Linux)">
        <style type="text/css">
        &lt;!--
                @page { size: 21cm 29.7cm; margin: 2cm }
                P { margin-bottom: 0.21cm }
                H1 { margin-bottom: 0.21cm }
                H1.western { font-family: &quot;Times New Roman&quot;, serif }
                H1.cjk { font-family: &quot;DejaVu Sans&quot; }
                H1.ctl { font-family: &quot;Tahoma&quot; }
                H2 { margin-bottom: 0.21cm }
                TD P { margin-bottom: 0cm }
        --&gt;</style>Segue minha contribuição, espero que seja útil. Agora é voltar ao batente. Se alguém agora puder assumir o resto da tarefa, agradeço. Realmente tão cedo não terei mais tempo de lidar com isto.<br><br>Tive algumas dificuldades, especialmente para traduzir &quot;built in functions&quot; (coloquei funções pré-definidas, mas acho que pode dar confusão com funções previamente definidas pelo programador); sigil, que traduzi como &quot;símbolo&quot;, embora acho que seria mais correto traduzir como &quot;signo&quot;, mas achei que ficaria estranho no contexto; &quot;the inlining of constants&quot;, nem traduzi pois não faço a mínima idéia do que seja.<br>
<br>Bem, lá vai:<br><br><br>----------------------------<br><br><br><br>


        <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
        <title></title>
        <meta name="GENERATOR" content="OpenOffice.org 2.4  (Linux)">
        <style type="text/css">
        &lt;!--
                @page { size: 21cm 29.7cm; margin: 2cm }
                P { margin-bottom: 0.21cm }
                H1 { margin-bottom: 0.21cm }
                H1.western { font-family: &quot;Times New Roman&quot;, serif }
                H1.cjk { font-family: &quot;DejaVu Sans&quot; }
                H1.ctl { font-family: &quot;Tahoma&quot; }
                H2 { margin-bottom: 0.21cm }
                TD P { margin-bottom: 0cm }
        --&gt;
        </style>

<p style="margin-bottom: 0cm;">Subrotinas chamadas com o "e
comercial"</p>
<div id="st-page-content" dir="ltr">
        <h1 class="western">Subrotinas chamadas com o "e comercial"</h1>
        <p align="left">Chamar subrotinas com "es comerciais" é um sinal
        de <a href="http://www.perlfoundation.org/perl5/index.cgi?ancient_perl">Perl
        antigo</a>. Esta página visa descrever por que este foi comum uma
        vez, o que está errado com ele, e o que você pode fazer para
        consertar seu código fonte legado.</p>
        <p align="left">A propósito, se você não sabe o que é um "<i>e
        comercial</i>": o caracter &amp; é chamado um "e comercial".</p>
        <h2><a name="history_a_sigil_for_subroutines"></a>História: Um
        símbolo para subrotinas</h2>
        <p align="left">O Perl tem <a href="http://www.perlfoundation.org/perl5/index.cgi?sigil">símbolos<span style="text-decoration: none;">
        </span></a>que indicam o tipo de dado de uma variável. Os símbolos
        têm sido os mesmo através da história do Perl e praticamente
        gravados em pedra.</p>
        <table border="0" cellpadding="2" cellspacing="0" width="547">
                <col width="69">
                <col width="79">
                <col width="387">
                <tbody><tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Símbolo</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Exemplos</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Usado para</p>
                        </td>
                </tr>
                <tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">$</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">$foo<br>$foo[42]<br>$foo{&#39;bar&#39;}</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Elementos
                                únicos: escalares (incluindo elementos de array e hash)</p>
                        </td>
                </tr>
                <tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">@</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">@foo<br>@foo[23,
                                42]<br>@foo{&#39;bar&#39;, &#39;baz&#39;}</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Elementos
                                múltiplos: arrays e [pedaço]s of arrays e hashes</p>
                        </td>
                </tr>
                <tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">%</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">%foo</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Hashes</p>
                        </td>
                </tr>
                <tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">*</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">*foo<br>*foo{SCALAR}<br>*foo{HASH}</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;"><a href="http://www.perlfoundation.org/perl5/index.cgi?symbol_table"><font color="#000000"><span style="text-decoration: none;">Entradas
                                de </span></font>Tabela de Símbolos</a> (&quot;[typeglob]s&quot;)</p>
                        </td>
                </tr>
                <tr>
                        <td width="69">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;</p>
                        </td>
                        <td width="79">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;foo<br>&amp;foo($bar,
                                $baz)</p>
                        </td>
                        <td width="387">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Subrotinas</p>
                        </td>
                </tr>
        </tbody></table>
        <p><br><br>
        </p>
        <p align="left">O modo básico de criar uma subrotina não mudou desde
        o Perl 1. A palavre sub, seguida do nome da subrotina, e então o
        bloco de código (incluindo as chaves)</p>
        <p><br><br>
        </p>
        <blockquote>sub foo { 
        </blockquote>
        <blockquote style="margin-left: 2cm; margin-right: 2cm;"># some code
        here, that receives the <br># arguments passed to the sub<br># in
        the special array @_.</blockquote>
        <blockquote>}</blockquote>
        <p><br><br>
        </p>
        <p align="left">O modo de <i>chamar</i> a subrotina (voce poderia
        dizer <i>executar</i> a subrotina) mudou. Aliás, duas vezes!</p>
        <p>No início do Perl, as subrotinas eram chamadas com a palavra
        pré-definida <b>do</b>. Embora <b>do</b> ainda esteja no Perl hoje,
        e ainda suporte esta sintaxe muito antiga, quando você vê <b>do</b>
        em código moderno, será praticamente sempre <strong>do $filename</strong>
        ou <strong>do BLOCK</strong>.</p>
        <blockquote># This is how you would call a sub called &quot;foo&quot;
        in Perl 1<br>do foo (&quot;argument 1&quot;, &quot;argument 2&quot;);</blockquote>
        <p><br><br>
        </p>
        <p align="left">Posteriormente, as subrotinas ganharam um símbolo, um
        marcador visual para indicar seu tipo. Isto permitiu o uso de uma
        subrotina sem a palavra <b>do</b>, e fez o código parecer muito
        mais natural. O símbolo para subrotinas era o "e comercial", &amp;.
        Embora a definição da subrotina não tenha ganho o símbolo,
        praticamente toadas as chamadas a subrotinas estavam logo sendo
        feitas com  <strong>&amp;foo(&quot;argument 1&quot;, &quot;argument
        2&quot;)</strong> ao invés de <strong>do foo (&quot;argument 1&quot;,
        &quot;argument 2&quot;)</strong>.</p>
        <p align="left">Há algo especial sobre o modo <strong>&amp;foo</strong>
        de chamar subrotinas, que tem a ver com se você usa ou não
        parênteses. Usar <strong>&amp;foo</strong> sem parênteses faz o
        Perl passar adiante o<em> @</em> _ <em>corrente</em> como argumentos
        da chamada de subrotina. Isto significa que há um enorme diferença
        entre <strong>&amp;foo</strong> e <strong>&amp;foo()</strong>.</p>
        <h2><a name="why_it_s_bad_now"></a>Por que é ruim agora</h2>
        <p>O Perl novamente ganhou uma nova sintaxe para chamar subrotinas
        no Perl 5. O mesmo que o jeito antigo, mas sem a palavra <b>do</b>.
        Qualquer <a href="http://www.perlfoundation.org/perl5/index.cgi?bareword">palavra
        não reservada</a> seguida de parênteses é agora vista como uma
        chamada de subrotina e fechou mais o espaço entre funções
        pré-definidas (freqüentemente chamadas "named operators"). Não
        apenas o <b>&amp;</b> tornou-se opcional, os parênteses podiam
        agora ser deixados completamente de fora se a subrotina fosse
        <a href="http://www.perlfoundation.org/perl5/index.cgi?predeclared">predeclarada</a>.
        Ao mesmo tempo, Perl ganhou <a href="http://www.perlfoundation.org/perl5/index.cgi?prototypes">protótipos</a>,
        que tornou possível imitar a sintaxe de funções pré-definidas
        para funções escritas em Perl. Protótipos também são
        frequentemente usados para assegurar um certo número de argumentos,
        mas este uso de protótipos permanece controverso até hoje.</p>
        <p>O antigo estilo <strong>&amp;foo</strong> não suporta
        protótipos, mas você ainda pode chamar subrotinas que têm
        protótipos com ele. O protótipo é ignorado. Isto é
        potencialmente perigoso, porque a subrotina pode contar com o
        protótipo para fazer coisas para ela. Além disso, faz a forma "e
        comercial" desabilitar otimizações como <font color="#ff0000">the
        inlining of constants.</font></p>
        <p>Por <strong>&amp;foo</strong> estar ficando fora de estilo, a
        muitos programadores não é mais ensinada a diferença entre usar
        parêteses com ele e omiti-los. Bugs causados por pessoas que usam
        <strong>&amp;foo </strong>e pensaram que faria o mesmo que <strong>&amp;foo()</strong>
        podem ser bem difíceis de encontrar e depurar.</p>
        <p>Mas muitas pessoas pressionarão você a mudar seu estilo
        carregado de "es comerciais" para o visual moderno mais limpo
        apenas porque eles acham os velhos "es comerciais" uma coisa
        feia que atrapalha. <i>Há</i> algum valor em estética de código!</p>
        <h2><a name="good_uses_of_foo"></a>Bons usos de &amp;foo</h2>
        <p>Ainda há bons usos de &amp;foo. Em geral, o símbolo &amp; é
        correto quando você está <i>fazendo referência à subrotina, mas
        não a está chamando</i>. Alguns exemplos:</p>
        <blockquote>defined &amp;foo<br>undef &amp;foo<br>\&amp;foo</blockquote>
        <p><br><br>
        </p>
        <p>Praticamente é sempre ruim quando você está chamando a
        subrotina. Entretanto, <strong>&amp;foo</strong> é levemente mais
        eficiente que <strong>foo(@_)</strong>. Se você está usando esta
        (micro-)otimização, certifique-se de adicionar um comentário que
        indica que você sabe o que está fazendo, algo como:</p>
        <blockquote>&amp;foo; # otimização: passar @_ eficientemente</blockquote>
        <p><br><br>
        </p>
        <h2><a name="fixing_your_code"></a>Consertando seu código</h2>
        <p>Para melhorar seu código, simplesmente encontra todas as
        ocorrências de "e comercial" na frente de um nome de subrotina
        e, a não ser que seja um dos bons usos listados, simplesmente
        remova o "e comercial". Note que um <strong>&amp;foo</strong>
        pelado, sem argumentos e <i>sem parênteses</i> se traduz em
        <strong>foo(@_)</strong>, se você quer mudar este (ainda
        perfeitamente aceitável) uso também.</p>
        <p>Chamar uma subrotina por uma referência a ela ao invés de seu
        nome é feito melhor com o  <a href="http://www.perlfoundation.org/perl5/index.cgi?arrow%20operator">operador
        flecha</a>, <strong>-&gt;</strong>.</p>
        <table border="0" cellpadding="2" cellspacing="0" width="387">
                <col width="153">
                <col width="226">
                <tbody><tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Antes</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">Depois</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;foo()</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">foo()</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;foo($arg1,
                                $arg2)</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">foo($arg1,
                                $arg2)</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;foo</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">foo(@_)<br>(&amp;foo
                                é aceitável se comentado)</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;$subref()</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">$subref-&gt;()</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;$subref($arg1,
                                $arg2)</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">$subref-&gt;($arg1,
                                $arg2)</p>
                        </td>
                </tr>
                <tr>
                        <td width="153">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">&amp;$subref</p>
                        </td>
                        <td width="226">
                                <p style="border: 1px solid rgb(0, 0, 0); padding: 0.05cm;">$subref-&gt;(@_)</p>
                        </td>
                </tr>
        </tbody></table>
        <p><br><br>
        </p>
        <p>Note que esta é "apenas "uma melhoria de estilo. É muito
        improvável aumentar o desempenho do seu programa de modo que se
        note, isso se aumentar.</p>
        <p><br><br>
        </p>
</div>
<p style="margin-bottom: 0cm;">-------------------------------------------</p><p style="margin-bottom: 0cm;"><br></p><p style="margin-bottom: 0cm;"><br>
</p>
<br><br><div class="gmail_quote">2008/11/19 Estevam Brayn <span dir="ltr">&lt;<a href="mailto:estevambrayn@gmail.com">estevambrayn@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Eu sou voluntário, MAS:<br><br>Eu apenas acompanho as discussões aqui, não programo e nem trabalho com isto.<br>Por isto, ofereço-me para fazer uma tradução inicial e depois posto aqui para que os amigos façam uma revisão dela, principalmente porque não conheço bem os termos técnicos em português. E também não tenho a mínima idéia de como formatar e colocar no <a href="http://perl.org.br" target="_blank">perl.org.br</a>.<br>

Eu sempre tenho vontade de colaborar aqui mas nunca tenho conhecimento suficiente para participar das discussões, então espero ajudar traduzindo.<br>Bem, vou começar.<br>Abraços!<br><br><div class="gmail_quote"><div class="Ih2E3d">
2008/11/19 Luis Motta Campos <span dir="ltr">&lt;<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank">luismottacampos@yahoo.co.uk</a>&gt;</span><br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> &nbsp;Gente,<div><div></div><div class="Wj3C7c"><br>
<br>
 &nbsp;por causa das minhas perguntas na lista, apareceu um documento novo no<br>
Wiki do Perl 5:<br>
<br>
<br>
<a href="http://www.perlfoundation.org/perl5/index.cgi?subroutines_called_with_the_ampersand" target="_blank">http://www.perlfoundation.org/perl5/index.cgi?subroutines_called_with_the_ampersand</a><br>
<br>
 &nbsp;Ele contém a história completa (em inglês).<br>
<br>
 &nbsp;Traduzir isso para pt_BR e publicar no <a href="http://perl.org.br" target="_blank">perl.org.br</a> pode ser uma coisa<br>
interessante e importante para fazer.<br>
<br>
 &nbsp;Alguém é voluntário?<br>
<br>
 &nbsp;Putamplexos!<br>
<font color="#888888">--<br>
Luis Motta Campos is a software engineer,<br>
Perl Programmer, foodie and photographer.<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a></font></div></div></blockquote></div><br>
</blockquote></div><br>