<div>[Perl 5 - Básico] #4 Subrotinas - Parte I</div><div>    Para a reutilização de código, a primeira facilidade provida por Perl</div><div>    5 são as subrotinas. Subrotinas são usadas como funções (para</div><div>    retornar um valor), rotinas (para executar uma sequência de passos), e</div>
<div>    como métodos (em programação com objetos).</div><div><br></div><div>        # twice($n) calcula 2*$n (duas vezes $n)</div><div>        sub twice { $_[0]*2 }</div><div><br></div><div>    Como em funções C, subrotinas Perl podem ou não retornar valores, e o</div>
<div>    código que as chama pode ou não usar destes retornos. Assim:</div><div><br></div><div>        $m = twice(2);</div><div><br></div><div>    vai atribuir 4 à variável escalar $m. Enquanto:</div><div><br></div><div>        sub print_array {</div>
<div>            local $&quot; = &#39;, &#39;;</div><div>            print &quot;(@_)\n&quot;</div><div>        }</div><div><br></div><div>        print_array(1,2,3,4);</div><div><br></div><div>    vai apresentar a saída:</div>
<div><br></div><div>        (1, 2, 3, 4)</div><div><br></div><div>    Sim, se você é iniciante, deve estar pensando: $_[0]?! $&quot;?! @_?! Cruz</div><div>    credo! O que é isso? Xingação? Não, é Perl. Perl é cheio de</div>
<div>    variáveis mágicas, com as quais você vai se familiarizar aos poucos e</div><div>    vai aprender a apreciar quando for mais fluente na linguagem. Mas não</div><div>    fui muito justo nos exemplos acima. Pois então vamos recomeçar.</div>
<div><br></div><div>    Toda subrotina em Perl passa os seus parâmetros através de uma</div><div>    variável *array* @_. As formas mais legíveis para tratar os argumentos</div><div>    é lhes dar nomes logo nas primeiras linhas de código das subrotinas.</div>
<div>    Há duas formas básicas de fazer isto: com &quot;shift&quot;:</div><div><br></div><div>        sub twice {</div><div>            my $n = shift;</div><div>            return $n*2;</div><div>        }</div><div><br>
</div><div>    Por agora, basta saber que &quot;shift&quot; retorna o primeiro argumento em @_,</div><div>    ao mesmo tempo que o remove da lista de argumentos. Assim, para uma</div><div>    subrotina com dois argumentos:</div>
<div><br></div><div>        sub tuple {</div><div>            my $a = shift;</div><div>            my $b = shift;</div><div>            return [$a, $b];</div><div>        } </div><div><br></div><div>    Ao invocar &quot;tuple(8,10)&quot;, $a vai tomar o valor 8 e $b receberá 10 e o</div>
<div>    retorno será o &quot;*array*&quot; &quot;[8,10]&quot;.</div><div><br></div><div>    A segunda forma é fazendo uma atribuição de @_ a uma lista de</div><div>    variáveis:</div><div><br></div><div>        sub tuple {</div>
<div>            my ($a, $b) = @_;</div><div>            return [$a, $b];</div><div>        }</div><div><br></div><div>    é equivalente ao código anterior (com a diferença de que @_ permanece</div><div>    intacto, enquanto na versão com &quot;shift&quot;, @_ é modificado).</div>
<div><br></div><div>    Há muito o que falar sobre subrotinas. E é por isso que esta é só a</div><div>    Parte I desta estória.</div><div><br></div><div>        Triangulo-pm, 2009-08-01 14:00</div><div><br></div>