A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Linguagem Perl - Variáveis

Qui

20

Nov

2008


14:04

(3 votos, média 5.00 de 5) 


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:

#!/usr/bin/perl %Dados = ("Nome", "Joana", "Idade", 23, "Grau", "Superior"); print $Dados{'Nome'}, " tem ", $Dados{'Idade'}, " anos de idade e grau ", $Dados{'Grau'};

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".

info 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:

#!/usr/bin/perl &A(); sub B() { print $$ReferenciaTexto, "\n"; # O valor existe apenas na referência! } sub A() { my $Texto = "Isto é um pequeno texto"; $ReferenciaTexto = \$Texto; # Aqui é definida a referência &B(); }

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.

info 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"}
Вадим Логофет отецкерамические кастрюли купитьростов никас харьков центр духовныйwobs.uaооо компания полигон полигон

Informações adicionais