$ @ % – O que isso significa?!
Antes de qualquer coisa, gostaria de agradecer ao Blabos o convite e a introdução tão exagerada…
Bom, mas eu estou aqui pra falar de perl, então vamos começar.
Variáveis, como o nome diz, elas são usadas para armazenar valores variáveis. Em perl existem 3 tipos básicos de variáveis (preste atenção, eu disse básicos). Esses são:
- Scalar
- Array
- Hash
Elas servem p/ armazenar valores. Cada um desses “tipos” são representados com um símbolo. Quando você se refere a um valor escalar, você deve usar o símbolo “$“, para array “@” e para hash “%“.
Vamos ver isso na prática:
Escalares
Para criar uma variável scalar chamada “var_scalar“, basta você usá-la:
$var_scalar;
Bem simples, não?! Agora, e como eu ponho um valor dentro dessa variável? Ainda mais fácil:
$var_scalar = 0;
Nada mais lógico, certo? Só de você usar essa variável, o perl já a cria p/ você… Legal né?! Então é assim que eu seto um valor numérico para uma variável scalar em perl, mas e se eu quiser usar uma string? Bom, p/ isso basta:
$var_scalar = "String setada dentro da variável";
Sim, você entendeu certo! Você não precisa dizer se vai ser número ou texto! Para o perl é “indiferente”!
Isso tá muito fácil, né?! Vamos passar para o próximo caso, Array.
Arrays
O símbolo para array é o “@“. Então como seria um nome válido para um array? Que tal esse?
@var_array;
Isso! Mas o que exatamente é um array? Array ‘uma variável que contém uma lista de valores. Por exemplo:
@array_numerico = (1, 2, 3, 4, 5); @array_de_strings = ("lalala", "lelele", "lilili", "lololo", "lululu"); @array_misturado = (1, "lalala", 2, "lelele", 3, "lilili", 4);
Bom… Mas no caso do primeiro, o @array_numerico, se eu quisesse popular o array com os números de 1 a 100, eu teria que escrever os numeros de um a um? Não, existe forma mais fácil:
@array_numerico = (1 ... 100);
Bem simples de entender, e bem menor que escrever os números de 1 a 100…
Bom, já entendemos como setar um array inteiro de uma única vez… Mas e se eu quiser criar valor por valor?! É possível? Claro!
$meu_array[0] = "Posição 0..."; $meu_array[1] = "Posição 1..."; $meu_array[2] = "Posição 2..."; $meu_array[3] = "Posição 3..."; $meu_array[4] = "Posição 4...";
Pera aí que eu agora me confundi!!! Você não disse que o símbolo do array era o “@“?! Porque vc tá usando “$“?!
Bem, os colchetes (“[]“) indicam que estamos procurando uma posição de um array, e dentro dessa posição nada mais temos que um valor escalar! Por isso usamos o “$“. Caso estivessemos usando mais de uma posição do array (uma lista de valores), usariamos o “@“.
@meu_array[0, 2, 4] = ("Posição 0...", "Posição 2...", "Posição 4...");
Isso sim, agora estamos tratando de uma lista de valores, logo usamos o “@“…
Array – Conjunto de Funções
Arrays em perl tem um conjunto de funções bem especificas pra eles, vamos ver algumas:
- push
- shift
- pop
- unshift
- splice
Vamos do começo, o push inclui um (ou mais) valor(es) num array, por exemplo:
push @array_exemplo, "posição 0"; # agora o array contém "posição 0". push @array_exemplo, 1, 2, 3; # agora é ("posição 0", 1, 2, 3) push @array_exemplo, "pos 4"; # e agora ("posição 0", 1, 2, 3, "pos 4")
Entendeu?
O shift remove e retorna o primeiro elemento do array, vamos ver como ele funciona:
shift @array_exemplo; # o array agora tem (1, 2, 3, "pos 4") $meu_scalar = shift @array_exemplo; # array:(2, 3, "pos 4"), scalar: 1 $meu_scalar = shift @array_exemplo; # array:(3, "pos 4"), scalar: 2
Certo? O pop remove, e retorna o último elemento o array, e o unshift incui um ou mais elementos no inicio do array.
A sintaxe do splice é a seginte:
splice @array, $posicao, $quantidade, "lista", "de", "elementos";
Bom, vamos ver alguns exemplos:
@array = (1 ... 10); # (1 ,2, 3, 4, 5, 6, 7, 8, 9, 10) splice @array, 5, 2; # (1, 2, 3, 4, 5, 8, 9, 10) # Eu não passei uma lista p/ botar no lugar, então # ele foi na posição 5 do array (no valor 6) e subs- # tituiu os 2 elementos apartir daquela posição (5 e 6) # pelos elementos da lista (nada) splice @array, 2, 1, "lalala", "lelele"; # (1, 2, "lalala", "lelele", 4, 5, 8, 9, 10) # ele foi na posição 2, e substituiu 1 elemento apartir # dessa posição pelos elementos da lista ("lalala", "lelele") splice @array, 6, 0, "teste"; # (1, 2, "lalala", "lelele", 4, 5, "teste", 8, 9, 10) # vai na posição 6, subistitua nenhum elemento pela lista
Além dessas funções, os arrays tem algumas outras coisas interessantes…
@array = (1 ... 5); print scalar @array, "\n"; # imprime 5 print $#array, "\n"; # imprime 4
Como assim?! scalar?! isso é uma variável?! mas tá sem o “$“!!! $#array?! o que significa isso?!
Calma… eu explico! Não, o scalar não é uma variável, o scalar muda o contexto da expressão p/ contexto scalar (como o nome diz…) e um array num contexto scalar retorna o numero de elementos desse. No caso, o array contendo 1 … 5 quer dizer que ele contem 5 elementos. E o $#array? Bom, todo array que você cria, cria essa “variável”. Se o nome do seu array é @array, a variável vai ser $#array, se o nome é @lista, vai ser $#lista e se for @estou_sem_criatividade_pra_inventar_nome_de_array, ela será $#estou_sem_criatividade_pra_inventar_nome_de_array. E o que isso faz? Isso retorna a última posição do array. Se um array tem 5 elementos, e os indices começam de 0, logo a última posição do array será 4.
Hashs
Basta de array! Vamos ver os hashs. O símbolo p/ hash é o “%“. Hash é uma lista de valores, que diferente dos arrays não são indexados por números, mas sim por nomes, e não são ordenados.
%hash_exemplo; %meu_hash = ("Janeiro" => 1, "Fevereiro" => 2, "Março" => 3);
O %meu_hash possui 3 posições, a posição “Janeiro“, a “Fevereiro” e a “Março“. A posição “Janeiro” contém o valor 1, a “Fevereiro” contém 2 e a “Março” contém 3.
Se você quiser escrever posição por posição, você também pode:
$meu_hash{"Abril"} = 4; $meu_hash{"Maio"} = 5; $meu_hash{"Junho"} = 6; $meu_hash{"Julho"} = 7;
As chaves (“{}“) indicam que é uma posição de hash, e o “$” indica que essa posição é um valor escalar.
Hashs – Funções
Os Hashs também tem funções interessantes:
- keys
- values
- delete
O keys retorna todas as chaves (nome de posições) do hash:
@chaves = keys %meu_hash; # @chaves contem ("Janeiro", "Fevereiro", # "Março", "Abril", "Maio", "Junho", "Julho")
O values retorna o valor de todas as posições:
@valores = values %meu_hash; # @valores contém (1, 2, 3, 4, 5, 6, 7)
E o delete apaga uma posição do hash e retorna o valor daquela posição:
$maio = delete $meu_hash{"Maio"}; # o hash não tem mais posição maio # e $maio contem 5.
Bom, é melhor eu ir parando por aqui… Acho que acabei me empolgando e isso ficou muito grande…
Obrigado pela leitura. Se isso tiver muito fácil p/ você, talvez fosse interessante uma olhada no perl-e.org, onde o material é para os programadores avançados.
Ficou interessado? quer saber mais?
Mais uma vez Blabos, obrigado pelo espaço, e até a próxima!
Comments
-
http://blabos.org blabos
-
http://perl-e.org SmokeMachine
-
http://br-linux.org/2009/mini-tutorial-sobre-perl/ Mini Tutorial sobre Perl
-
garu
-
Sicka
-
Mago
-
http://estilotabi.blogspot.com tairone
-
http://blabos.org blabos
-
http://perl-e.org SmokeMachine
-
http://blog.blabos.org/2009/02/escrevendo-na-tela/ Escrevendo na tela : Blog do Blabos de Blebe
-
Júnio

