Parâmetros de funções em Perl

by

Uma coisa que ainda me irrita um pouco é a falta de assinatura de funções em Perl. Quando eu já estava me acostumando com parâmetros tipados e começava a desejar type hint para retorno de métodos, no Perl parece que não temos nada disso.

Os argumentos de funções chegam no array @_. Dentro da função você precisa pegar os argumentos dessa lista e fazer as validações necessárias.

Exemplo:
sub escrever_dados {
    my ($nome, $cidade) = @_;
    print "Nome: $nome, cidade: $cidade\n";
}
 
escrever_dados('Mary', 'Rio de Janeiro');

A função nesse caso recebe uma lista e os seus elementos são passados para as variáveis locais.

O que mais me incomoda é que parâmetros a mais ou a menos na chamada à função não resultam em erro algum. O que pode ser feito é validar dentro da função a quantidade e tipo dos parâmetros, mas torna o código extremamente repetitivo e mais sujeito a erros.
sub escrever_dados {
    if (scalar @_ != 2) {
        print "Função espera 2 argumentos\n";
        return 0;
    }
    my ($nome, $cidade) = @_;
    print "Nome: $nome, cidade: $cidade\n";
}
 
escrever_dados('Mary', 'Rio de Janeiro', 'Vai dar erro');
escrever_dados('Também vai dar erro');
escrever_dados(); # Lista vazia (scalar 0) também dá erro

A não ser que alguém conheça uma forma melhor. Alguém? Alguém?

Como o @_ é uma lista normal, qualquer forma de acesso é válida:
sub saudacao {
    my $nome = shift;
    print "Oi, $nome!\n";
}
 
saudacao('Mundo');

sub erro {
    die "Erro inesperado $_[0]\n";
}
 
erro('Valor inválido!');

Mas ainda acho que associar as variáveis na forma my ($nome, $cidade) = @_; fica mais claro. Exceto quando estamos trabalhando com objetos, aí acho mais claro fazer my $self = shift; antes. Mas aí já é outra história.

Divirta-se.

Anúncios

Uma resposta to “Parâmetros de funções em Perl”

  1. Felipe Pena Says:

    Hahah, pois é rapaz, é uma neglicência só!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: