Informática Numaboa - Tutoriais e Programação
Linguagem Perl - Variáveis
Qui 20 Nov 2008 14:04 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Quinta, 20 Novembro 2008 20:47
- Autor: vovó Vicki
- Acessos: 14534
Matrizes Associativas (Hash)
Matrizes comuns são constituídas por uma seqüência de valores que podem ser obtidos através do seu número de índice, que sempre começa com 0. Assim, o 8º elemento de uma matriz de nome @NomeDaMatriz pode ser obtido através de $NomeDaMAtriz[7].
Uma matriz associativa, denominada de Hash na linguagem PERL, guarda em cada elemento da lista duas coisas: um nome e um valor. Os valores da matriz, neste caso, não precisam ser acessados através do seu número de índice. Podem ser obtidos diretamente através do nome a eles associados. Exemplo:
Um hash é inicializado em PERL através do sinal de porcento %. Quando se cria um hash com dados, estes sempre são definidos em pares: o primeiro representa o nome do hash, o segundo corresponde ao valor que será obtido quando se utiliza o nome do hash. Assim, no exemplo acima, os primeiros dois elementos, "Nome" e "Joana", constituem o primeiro par hash do Hash %Dados.
Para acessar um determinado elemento dentro de um hash, utiliza-se o nome da variável hash precedida de um cifrão $, da mesma forma como em variáveis escalares simples. Após o nome da variável hash, utiliza-se um par de colchetes, dentro dos quais fica o nome do elemento hash desejado entre aspas simples. No exemplo acima obtém-se com $Dados{'Nome'} o valor correspondente a "Joana".
Observação: Os Hashes, ou seja, as matrizes associativas, têm as mesmas regras e características que as matrizes comuns.
Os hashes são muito úteis num script CGI. É possível, por exemplo, utilizá-los para armazenar parâmetros enviados por um formulário dando ao nome hash o nome dos campos do formulário e, ao valor hash, o valor atribuído pelo usuário aos mesmos campos do formulário.
Referências (Ponteiros de Variáveis)
Quem conhece a linguagem C (assim como outras), sabe o que são ponteiros e como a programação pode se tornar eficiente com o seu uso. Referências são ponteiros para tipos de dados previamente definidos (tanto faz se escalares, matrizes ou hashes). Através de referências é possível obter o conteúdo de uma variável escalar, de uma matriz ou de um hash da mesma forma que com o uso do nome original.
O interessante à respeito das referências em Perl é que o valor de uma variável é mantido enquanto existirem referências a essa variável. Isto é muito importante quando se trabalha com sub-rotinas, nas quais sejam definidos tipos de dados locais válidos. Exemplo:
O exemplo acima esclarece com funciona uma referência. O pequeno script Perl do exemplo contém duas subrotinas definidas como A() e B(). Inicialmente, com &A(), é chamada a subrotina A(). Nesta subrotina, a escalar $Texto, cuja sobrevida está restrita à subrotina A(), é definida através do uso de my (minha).
Logo após definir a escalar, a referência é definida. A referência é definida da mesma forma que uma escalar normal. Na atribuição do valor da referência utiliza-se uma barra invertida \. A barra invertida faz com que, ao invés da referência $ReferenciaTexto receber o mesmo valor de $Texto, ela receba o endereço onde se encontra o valor de $Texto. É por esse motivo que a referência ocupa muito menos memória que a escalar.
Por último, a subrotina B() é chamada na área da subrotina A(). Na subrotina B(), o valor da referência $ReferenciaTexto é apresentado através da função print. Se, neste ponto, a diretiva fosse print $Texto;, nada seria mostrado porque a variável $Texto da subrotina A(), com seu respectivo valor, a essa altura já foi descartada. O valor sozinho, porém, ainda existe e pode ser alcançado através da referência $ReferenciaTexto.
Para se obter o valor de uma referência através de uma escalar é necessário associar dois sinais de cifrão $$ ao nome da referência, como mostrado no exemplo acima.
Observação: Se, por exemplo, uma diretiva print se referir diretamente a uma referência ao invés de se referir ao seu valor, o endereço de memória onde se encontra o valor é mostrado na sua forma hexadecimal.
As referências podem ser definidas não só para escalares, como também matrizes e hashes; até mesmo para elementos de matrizes e hashs. A tabela a seguir dá uma idéia de como devem ser as notações:
Referência | Definição | Buscar valor | Alternativa |
de Escalar | $Ref = \$Escalar | $$Ref | ${$Ref} |
de Matriz | $Ref = \@Lista | @$Ref | @{$Ref} |
de Elemento de Matriz | $Ref = \@Matriz | @{$Ref}[0] | $Ref->[0] |
de Hash | $Ref = \%Hash | %$Ref | %{$Ref} |
de Elemento de Hash | $Ref = \%Hash | %{$Ref}{"Nome"} | $Ref->{"Nome"} |
- << Anterior
- Próximo