<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 $" = ', ';</div><div> print "(@_)\n"</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]?! $"?! @_?! 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 "shift":</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 "shift" 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 "tuple(8,10)", $a vai tomar o valor 8 e $b receberá 10 e o</div>
<div> retorno será o "*array*" "[8,10]".</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 "shift", @_ é 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>