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) 


Existem vários tipos e modos de referência a variáveis na linguagem Perl. Neste tutorial tentei destrinchar ao máximo o assunto.

Variáveis Simples (Escalares)

Variáveis são áreas de armazenamento nas quais podem ser guardados dados que serão utilizados durante a execução de um programa. O conteúdo de uma variável é denominado de "valor". Os valores de variáveis podem ser alterados a qualquer tempo.

Em Perl, uma variável simples, que contenha um número ou uma sequência de caracteres, é denominada de variável escalar. Exemplos:

$Nome_1 = "Matusalém"; $Idade_1 = 625; $Nome_2 = "Pedro Bó"; $Idade_2 = sqrt($Idade);

Um pequeno script Perl usando variáveis escalares:

#!/usr/bin/perl $Valor = 123456; $Valorzinho = substr($Valor,1,3); print $Valorzinho;

Uma escalar, ou seja, uma variável simples, é composta por um cifrão $ seguido do nome da variável. O cifrão sempre precisa estar presente se a variável for utilizada para receber um valor ou numa operação (como no exemplo acima, onde a variável $Idade aparece dentro da função sqrt() que calcula a raiz quadrada de um número).

Você pode definir escalares para conteúdo numérico ou para sequências de caracteres (strings). O tipo de conteúdo é decidido no momento em que se atribui o valor da escalar ou no momento em que ela é utilizada numa diretiva. Se o valor atribuído for uma sequência de caracteres, estes precisam estar entre aspas, simples ('caracteres') ou duplas ("caracteres"). Para maiores detalhes, veja Convenções para Sequência de Caracteres.

info Observações: Os dados em Perl não são "tipados". Quando se tem uma sequência de caracteres constituída apenas por caracteres numéricos (ex. "7423.13"), pode-se efetuar cálculos numéricos com a mesma, sem nenhum problema. Da mesma maneira, pode-se tratar valores numéricos como uma sequência de caracteres. Para observar esta característica, verifique o pequeno script acima. Definiu-se $Valor como uma escalar numérica. Logo abaixo, utilizamos uma função típica para tratamento de strings, a substr(). Os parâmetros desta função significam: extrair, a partir do segundo caracter, três caracteres (o segundo caracter é solicitado através do parâmetro 1 porque em Perl, assim como na maioria das outras linguagens de programação, começa-se a contar a partir do zero). O resultado obtido, "234", é armazenado na escalar $Valorzinho. Caso você já programe em outra linguagem, então você poderá avaliar o grau de liberdade que a linguagem Perl oferece no tratamento de variáveis.

Matrizes (Arrays)

Matrizes são seqüências de grupos de escalares. Em Perl, as matrizes têm uma importância primordial porque oferecem um modo muito fácil de armazenar dados e de manipulá-los. Exemplo 1:

#!/usr/bin/perl @Dados = ("Maria",23,"Curitiba","3o.Grau"); print $Dados[0], " tem ", $Dados[1], " anos, mora em ", $Dados[2], " e tem ", $Dados[3];

Exemplo 2:

#!/usr/bin/perl for($i = 1;$i <= 9;$i++) { $Valor = $i * $i; push(@Quadrados, $Valor); } for(@Quadrados) { print $_, "\n"; }

Exemplo 3:

#!/usr/bin/perl @Letra = ("a".."z"); print $Letra[2], "\n";

Em Perl, uma matriz é iniciada por um sinal de arroba @ seguido do nome da matriz. É possível inicializar uma matriz com valores predefinidos, como a matriz @Dados do exemplo 1. Note que os dados precisam estar entre parênteses e separados por vírgulas.

As matrizes também podem ser geradas dinamicamente, como se pode observar no exemplo 2: dentro de um loop, que conta de 1 até 9, a matriz @Quadrados é povoada dinamicamente com os quadrados dos números de 1 atá 9. Isto é possível graças ao uso da função push(), a qual adiciona elementos no final da matriz.

O exemplo 3 mostra uma variação especial. Para se povoar uma matriz com letras (de-até) ou com números (de-até) basta indicar o primeiro e o último caractere desejado, separados por dois pontos (no exemplo, a matriz @Letra é povoada com caracteres minúsculos de a até z).

Quando os valores de uma matriz são predefinidos, valem as mesmas regras das variáveis escalares: strings são indicadas entre aspas, valores numéricos não precisam de aspas. É claro que também é possível povoar uma matriz com escalares. Neste caso, a lista incorpora o valor das escalares correspondentes.

Para se referir a um determinado elemento de uma matriz, utiliza-se o nome da matriz precedido do sinal de cifrão $ (da mesma forma que nas escalares). Após o nome, segue o número do elemento da lista entre colchetes. O primeiro elemento é identificado por @NomeDaLista[0], o segundo por @NomeDaLista[1] e assim sucessivamente. No primeiro exemplo, logo acima, esta característica fica bem clara.

Ainda com referência aos 3 exemplos citados, seguem os dados das matrizes criadas e seus respectivos elementos.

@Dados $Dados[0] $Dados[1] $Dados[2] $Dados[3]
Maria 23 Curitiba 3o. Grau

@Quadrados
$Quadrados[0] 1
$Quadrados[1] 4
$Quadrados[2] 9
... ...
$Quadrados[7] 64
$Quadrados[8] 81
@Letras
$Letra[0] a
$Letra[1] b
$Letra[2] c
... ...
$Letra[24] y
$Letra[25] z

É muito simples atribuir o valor de um elemento de uma matriz a uma variável escalar. Basta a seguinte linha de comando: $Nome = $Dados[0];

Também é muito simples copiar uma matriz completa para outra matriz. Basta o comando: @NovaLista = @Quadrados;

Pode-se armazenar strings e valores numéricos numa mesma matriz, como no exemplo 1 acima. Também não existe limitação do número de elementos numa matriz. Pode-se, portanto, armazenar uma matriz inteira como elemento de uma outra matriz, ou seja, uma matriz B dentro de um elemento da matriz A. Um elemento da matriz "embutida" B pode, então, ser obtido através de @MAtrizA[2][4] (isto é, o terceiro elemento da matriz A é a matriz B e, desta, solicita-se o quinto elemento).

Mesmo sem uma definição prévia, pode-se atribuir um valor a uma matriz. Por exemplo, $Numeros[5] = 4321; cria a matriz @Numeros com seis elementos, $Numeros[0] a $Numeros[5]. Os primeiros 5 elementos estão vazios e o sexto elemento recebe o valor 4321.

O último elemento de uma matriz pode sempre ser acessado através de @NomeDaMatriz[-1]. O índice negativo -1 está reservado para tal fim.

Informações adicionais