Informática Numaboa - Tutoriais e Programação
Linguagem Perl - Subrotinas e Funções
Sex 21 Nov 2008 14:29 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Sexta, 21 Novembro 2008 15:08
- Autor: vovó Vicki
- Acessos: 10759
A linguagem Perl permite a criação de subrotinas, o que, além de facilitar muito o trabalho dos programadores, permite criar um código mais enxuto e mais arrumado. Este tutorial mostra como criar subrotinas.
Subrotinas
Em scripts Perl mais complexos é aconselhável alocar porções específicas do programa em subrotinas definidas para estruturar melhor o script. O mais coerente é separar em subrotinas porções do programa que sejam solicitadas mais de uma vez durante a execução do script. Ao invés de repetir o código cada que vez que este seja necessário, transforme-o numa subrotina e chame-a nos pontos desejados. Veja um exemplo:
Uma subrotina é definida pela palavra-chave sub seguida de um nome da sua escolha (mas que siga a convenção de nomes da Perl). No exemplo dado foi definida a subrotina sub MostraResultado. Todo o conteúdo das subrotinas precisa estar contido entre chaves e não há limitação do número de linhas de comando.
Uma subrotina é chamada com o caracter "e comercial" & seguido do nome da subrotina. A chamada é um comando próprio, portanto precisa terminar como todos os outros comandos com um sinal de ponto-e-vírgula. No exemplo encontra-se duas vezes o comando &MostraResultado, que chama a subrotina MostraResultado.
Observação: Não faz diferença em qual posição se encontra uma subrotina dentro de um script. Durante a interpretação, o interpretador Perl executa sequencialmente todas as linhas de comando que se encontram fora das chaves.
As subrotinas, quando chamadas, são procuradas automaticamente. Uma vez terminadas, a execução do script continua na linha seguinte à linha de onde partiu a chamada.
Subrotinas com parâmetros e valores de retorno
Uma subrotina pode receber parâmetros, pode fornecer uma valor de retorno ou ambos. O exemplo abaixo mostra como enviar um parâmetros e gerar um valor de retorno:
Ao contrário de outras linguagens de programação, como C, Java ou Javascript, a linguagem Perl não exige que os parâmetros sejam declarados para que uma subrotina possa recebê-los. No exemplo acima a subrotina Calcular é chamada com o parâmetro (1 + 2 * 3 + 4 * 5 + 6 * 7 + 8 * 9). A subrotina Calcular processa esse parâmetro com o construtor $_[0]. Por trás deste construtor está uma variável predefinida, a lista _@, que é uma lista dos parâmetros enviados. $_[0] corresponde ao primeiro parâmetro, $_[1] ao segundo e assim por diante. Com uma diretiva como for(_@) { print $_, "\n"; } pode-se, por exemplo, processar todos os parâmetros sem a necessidade de saber quantos são. Esta facilidade dificilmente se encontra em outras linguagens de programação.
A extensa expressão de cálculo que é enviada à subrotina Calcular, na verdade é um único parâmetro. Quando for enviado mais de um parâmetro, estes devem ser separados por vírgulas.
Para que uma subrotina devolva um valor à rotina chamadora, a melhor função a ser utilizada é return, seguida do valor a ser retornado ou de uma variável cujo valor se queira retornar. No exemplo, return devolve um valor que é o resultado de uma função, o valor da função eval(). Esta função processa uma cadeia de caracteres como operação matemática e devolve o resultado calculado.
O valor devolvido pela subrotina Calcular é atribuído à escalar $x. Para que isto ocorra, atribui-se diretamente à escalar $x uma chamada à subrotina Calcular.
Variáveis Locais
Ao contrário da maioria das outras linguagens de programação, em Perl as variáveis definidas em subrotinas continuam válidas após o término da subrotina. Isto significa que não é possível usar o mesmo nome para duas variáveis diferentes no mesmo script. No momento em que se utilizar a variável homônima, o valor da primitiva é alterado - homônima e primitiva são simplesmente a mesma variável. Esta característica acabou levando à fama de que a Perl é uma linguagem com a qual é impossível programar de forma limpa e estruturada. Entretanto, há muito já existe a possibilidade de limitar a sobrevida de uma variável à respectiva subrotina... só não podemos esquecer de fazer isto!
Exemplo 1:
Exemplo 2:
No exemplo 1, primeiramente é chamada a subrotina Calcule. Nesta subrotina, a escalar $x é definida e calcula o primeiro parâmetro recebido. É tudo o que essa subrotina realiza. A seguir, na rotina principal, o valor de $x é mostrado. Isto funciona porque $x não perdeu seu valor após o término da subrotina Calcule.
O exemplo 2 diferencia-se do exemplo 1 apenas pelo uso da palavra reservada my (my = meu, minha) colocada antes da definição de $x. Colocando-se a palavra my antes da definição de uma escalar, um array ou um hash, define-se estas variáveis como locais, restritas à subrotina à qual pertencem. No exemplo 2, a escalar $x fica vazia e nada é apresentado como resultado.
Funções Perl
Perl é uma linguagem poderosa porque seu interpretador identifica uma grande variedade de subrotinas - aqui denominadas funções. Existem funções Perl para as tarefas mais variadas. Muitas delas podem ser encontradas em todos os tutoriais Linguagem Perl.
A primeira função do exemplo acima é print. Geralmente as funções em Perl, assim como em outras linguagens de programação, são chamadas com parênteses (). Os parênteses, porém, nem sempre são obrigatórios. Em funções de uso intensivo, como a função print, os parênteses caíram em desuso. Se, por exemplo, ao invés de escrever sort(@Lista) (que também aparece no exemplo) for escrito sort @Lista, o interpretador Perl executa a função sem problemas.
As funções Perl, em geral, aguardam parâmetros com os quais devem trabalhar. "Digite várias palavras separadas por vírgulas:\n"; é um parâmetro enviado para a função print. Mais abaixo, a função sort recebe como parâmetro a lista de nome $Lista. No caso da passagem de mais de um parâmetro, estes devem ser separados por vírgulas.
A grande maioria das funções Perl tem um valor de retorno. No exemplo acima, a função sort assume a ordenação da lista recebida como parâmetro e retorna uma nova lista com os elementos ordenados.
Duas outras funções existentes no exemplo acima são split e chop. A função split pode procurar caracteres ou uma sequência de caracteres em uma string, a qual é enviada como parâmetro associada a expressões regulares. Split, então, retorna uma lista com os elementos que foram separados de acordo com a regra de segregação especificada pelas expressões regulares.
A função chop elimina o último caractere de uma string. É muito útil, uma vez que as strings, em muitos casos, recebem automaticamente um sinal de quebra de linha (\n) como terminador.
Finalmentes
A lista de funções da linguagem Perl é imensa. Tem função de tudo que é tipo, para as mais diversas tarefas. Sugestão da vó:
Antes de criar uma subrotina, verifique se já não existe uma função pronta que faça o que você precisa. O tempo gasto com a procura não é perda de tempo, pode ter certeza.