Arquivo

Posts Tagged ‘variável’

Variável em Nome de Variável

Variável em Nome de Variável – Parece meio redundante, não é mesmo??

Mas não é!

Na verdade, esta é uma técnica (meio que gambiarra) de simular um vetor utilizando variáveis simples.

Pode ser bastante útil.
Pelo menos para mim foi.

Aí vai:

$cor=”verde”;

$cor_verde=”arvore”;

print ${“cor_$cor“};

Assim, você terá variáveis simples simulando vetores!

Abraços

Categorias:Variáveis Tags:,

Array no Perl

Um tipo de variável comum em quase todas as linguagens de programação é a Array. Vamos aprender como utilizá-la dentro do Perl.

As Arrays (arrêis) são um tipo de variável que armazenam dados em forma de lista. Cada objeto da lista é chamado de elemento, e estes elementos – no Perl – podem ser tanto strings como numéricos, ou qualquer outro tipo de dados inclusive uma outra variável.

Criando um Array

  1. Uma array é declarada no Perl com o símbolo (@).
  2. Após o simbolo, informamos o nome, por exemplo, @meses.
  3. Para definirmos os valores, devemos então abrir um colchete “(“.
  4. Definimos os valores. (Se for string, podemos colocar entre aspas)
  5. Fechamos a lista com o  colchete “)”

Esta é a simples síntaxe dos arrays no Perl. Quando estamos listando os valores da lista, podemos quebrar ela em várias linhas para que fique fácil de entender, porém, não podemos esquecer de fechar o colchete que informa ao Perl que a lista se encerra ali.

Exemplo:

@meses = (“Janeiro”,
   “Fevereiro”,
   “Março”,
   “Abril”,
   “Maio”,
   “Junho”,
   “Julho”,
   “Agosto”,
   “Setembro”,
   “Outubro”,
   “Novembro”,
   “Dezembro”);

 Acessando um Array

Depois que criamos o array, todo o conjunto poderá ser acessado se chamarmos @meses, mas se quisermos também podemos acessar o conteudo de apenas um ítem da lista informando sua devida posição da seguinte forma: $meses[POSICAO] onde POSICAO é a ordem que o ítem ocupa na lista.

Toda lista começa sempre em 0 (zero).

Agora digamos que queremos mostrar ao usuário o mês de Janeiro na tela.
Devemos apenas chamar a variável, da seguinte forma:

print $meses[0];

Informamos assima posição 0 (zero) porque Janeiro é o primeiro elemento da lista. 

E para acessar o último elemento da lista?

 print $meses[11];

Isto irá mostrar Dezembro. Porque Dezembro é o ítem que ocupa a 11º posição da lista @meses.

Tamanho de um Array

Se quisermos mostrar o tamanho de um Array, devemos apenas chamar o nome da Array da seguinte forma: $#array. Isto irá retornar o número de elementos que estão na lista.

Mas lembre-se de que o Perl considera o zero como o primeiro elemento da lista.

No nosso exemplo então, ele retornaria 11 (onze). Caso quisermos obter o número real, podemos usar a expressão $#array + 1;
Se isto fosse feito em nosso exemplo, teríamos como resultado o número 12, porque nossa lista contém 12 elementos se contarmos a partir de 1.


Veja um exemplo completo:
(array.cgi)

#!/usr/bin/perl
print “Content-type:text/html\n\n”;

@meses = (“Janeiro”,
   “Fevereiro”,
   “Março”,
   “Abril”,
   “Maio”,
   “Junho”,
   “Julho”,
   “Agosto”,
   “Setembro”,
   “Outubro”,
   “Novembro”,
   “Dezembro”);
print “O ano começa em “.$meses[0];
print “<br />”;
print “O Natal é um feriado do mês de “.$meses[11];
print “<br />”;
print “O número de meses de um ano é “.($#meses+1);


Split: Dividindo uma String

21 fevereiro, 2009 2 comentários

Uma tarefa muito comum quando utilizamos o Perl para manipular textos é o de separar e dividir uma String – seja ela uma palavra ou uma frase. O split é uma função nativa do Perl que realiza com extrema eficiência esta tarefa. Dado uma String e uma condição, ele realiza uma varredura na String a procura de algo que corresponda o que for definido na regex da condição. Conforme vão sendo encontrados resultados, o split vai retornando os mesmos. Veja sua sintaxe:

($retorno1,$retorno2) = split (/[condição]/,$frase,$limite);

  • As variáveis $retorno1 e $retorno2 receberão os dois dados que forem separados, cada um para a respectiva variável.
  • A condição pode ser expressa em forma de String ou expressão regular (regex) (Veja a tabela de regex).
  • O limite é um parâmetro opcional que só precisa ser definido se for necessário limitar o número de retornos.

No split podemos especificar quantas variáveis de retorno quisermos. Se o número de dados retornados for indefinido, podemos definiro retorno para uma array, da seguinte forma:

(@retornos) = split (/[condição]/,$frase,$limite);

Vejamos alguns exemplos práticos sobre como funciona o split:

$frase = “Campinas – SP”;
($cidade,$estado) = split(” – “,$frase); # Divide a frase por ” – ”

print “Eu moro em $cidade que fica no estado de $estado”;

O exemplo acima produzirá o seguinte resultado:

Eu moro em Campinas que fica no estado de SP


Podemos também usar regex para expressar as condições.
Digamos que temos uma String e queremos separá-la pelos números contidos nela.
Podemos usar a regex d+ que identifica os numeros contidos na String. Veja um exemplo:

$frase = “ABC1DEF2GHI”;
($div1,$div2,$div3) = split(/d+/,$frase,3);

print $div1.”n”;   print $div2.”n”;   print $div3.”n”;

O código acima mostrará o seguinte na tela:

ABC DEF GHI


Como último exemplo, podemos fazer uma separação de vários ítens de uma String.
Vamos pegar uma frase longa que não sabemos o número de retornos.

$frase = “O-rato-roeu-a-roupa-do-Rei-de-Roma”;
(@novaFrase) = split(/-/,$frase); # O retorno é feito na array @novaFrase

print $novaFrase[0].”n”;
print $novaFrase[1].”n”;
print $novaFrase[2].”n”;
(…)
print $novaFrase[8].”n”;

Isto irá separar a frase por e produzirá o seguinte resultado na tela:

O rato roeu a roupa do Rei de Roma

Note que não informamos ao split o número de variáveis que seriam retornadas e nem mesmo o limite, pois  tudo que ele for encontrando ele já vai incluindo na array especificada.
Para obtermos o valor, basta acessar o array informando suas respectivas posições para encontrar os ítens retornados.

Enfim, o split é certamente uma das funções mais importantes do Perl, e um fator que faz de nossa linguagem ser a melhor quando o assunto é manipulação de texto.

Até a próxima!