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