[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