Neste tutorial, vou comentar um pouco sobre o que sei de “array”, e ensinar o que sei sobre manipulá-los.
Array’s são basicamente matrizes, ou seja, guardam um pool de informações em determinadas posições quem mais tarde podem ser acessadas e manipuladas!
Em C as matrizes podem ser multidimensionais, desde uma matriz unidimensional, assim como em Perl, quanto em mais dimensões não exatamente nativamente em Perl, mas também não impedindo de que seja feito com algumas técnicas que irei apresentar. Contudo em Perl, você não precisa declarar o tamanho do array. O que dispensa a necessidade de incremento e decremento como em C, contudo essas ferramentas são necessárias por vezes.
Ainda temos array’s associativos, ou hash, que serão citados no final.
Código PHP:
int main(void)
{
int vetor[5]; /*Aqui declaro o tamanho do vetor*/
int x, y, z; /*Aqui declaro quantas dimensões*/
O caso acima apresentado necessitaria de um maior trabalho em Perl, pois seria necessário inserir array dentro de array.
Imaginemos as seguintes string:
Código PHP:
my $s1 = ‘a’;
my $s2 = ‘b’;
my $s3 = ‘c’;
Que ainda podem ser escritas dessa forma:
Código PHP:
my ($1, $2, $3) = (‘a’, ‘b’, ‘c’);
Strings em Perl, funcionam como pontos em um universo, mas se eu tenho um conjunto de pontos(ou dados) ou posso transformar-los em um vetor, isto é, se eles não estiverem fazendo associação entre si (o que é muito POG).
Portanto ficaria assim:
Código PHP:
my @s = (‘a’, ‘b’, ‘c’);
Mas se eu precisar acessar apenas um desses 3 dados, eu faço:
Código PHP:
my @s = (‘a’, ‘b’, ‘c’);
print $s[0] , “\n”;
Outro exemplo com mais manipulação:
Código PHP:
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('Aureliano', 'Guedes', 22, 'anos');
my $nome = $array[0]." ".$array[1];
my $idade = $array[2] - 1;
my $age = $idade . " " . $array[3];
print $nome , " " , $age , "\a\n";
Observaram??
Acima temos uma prova de que em Perl, um array não guarda apenas um tipo de dado, como na maioria das linguagens acontece, isso da mais liberdade para programar mas não descarta o fato que precisar tomar cuidado com isso, pois você não pode somar um inteiro ou real em uma palavra, isso constara um erro durante a compilação/interpretação!
Com isto, escrevemos na tela apenas o dado “a”, e lembramos também que começa-se contar a partir de 0.
E ainda, se quisermos saber quantos itens tem em um determinado array, fazemos:
Código PHP:
my @s = (‘a’, ‘b’, ‘c’);
$_ = @s;
# Para os desavisados $_ é uma variável especial, estudo sobre ela, pois é importante!
print $_ , “\n”;
É recomendável, se em seu programa o array seja passível de constantes alterações, que você jogue o conteúdo dentro de um arquivo externo que facilite sua alteração.
Com essas informações já podemos fazer muitas coisas, portanto vamos montar uma lista de nomes:
Código PHP:
acpguedes
fvox
CoderSc
netsoul
podolcee
Marcelo Moraes
R0Dr1g0
eduardu0
M4CK
KaiqueHunter
FoXxD
Guilez
Salve essa lista como nomes.txt.
Agora criaremos o seguinte programa:
Código PHP:
#!/usr/bin/perl
use warnings;
use strict
open FH, 'nomes.txt' or die “arquivo não encontrado\n”;
# O comando acima cria uma porta virtual “FH” no programa
#e abre o conteúdo contido no arquivo “nomes.txt”
my @array = <FH>;
# Joga o conteúdo da FileHandle para o array
$_ = @array;
for(my $i = 0; $i <= $_; $i++){
# Acabo de criar um contador que para quando
# atinge o numero de dados do array
my $foo = $array[$i];
# Faço um loop que atribui um dado por vez a string
print $foo, "ok\n";
sleep 1;
# Escrevo na tela os dados um a um seguidos de um “ok” a cada 1 segundo
}
print "Total: ", $_, " nomes\n";
# Informo o total de nomes
Podemos ainda adicionar ou retirar elementos de um array atravez do comando “push”.
Observem como usar-lo:
Código PHP:
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('Aureliano', 'Guedes', 22, 'anos');
push (@array, 'lindo');
my $nome = $array[0]." ".$array[1];
my $idade = $array[2] - 1;
my $age = $idade . " " . $array[3];
print $nome , " " , $age , " eh ", $array[4], "\a\n";
print @array , "\a\n";
Mas também podemos retirar o ultimo elemento:
Código PHP:
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('Aureliano', 'Guedes', 22, 'anos');
pop (@array);
my $nome = $array[0]." ".$array[1];
my $idade = $array[2] - 1;
my $age = $idade . " " . $array[3];
print $nome , " " , $age , "\a\n";
print @array , "\a\n";
Quer saber o que foi adicionado ou retirado? Jogue dentro de uma string!
Código PHP:
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('Aureliano', 'Guedes', 22, 'anos');
print "Array original eh ", @array, "\n";
my $adicionado = 'lindo';
push (@array, $adicionado);
print "Adicionei ", $adicionado, " ficou: ", @array, "\n";
my $retirado = pop (@array);
print "Retirei ", $retirado, " ficou: ", @array, "\n";
OK, existem muito mais coisas que se pode fazer, mais formas de manipular um dado, mas creio que esse básico irá dar noção o suficiente para caminhar com as próprias pernas mais tarde!
Mas vamos falar rapidamente de hash.
Hash, ou array associativo, são um conjunto de dados que podem ser acessados através de outro.
Código PHP:
%idade = (); # Cria uma hashing vazio.
%idade = ('jabuti', 80, 'rato', 3, 'cobra', 6);
# Outra maneira de fazer o mesmo acima.
%idade = (tuatara => 35, cachorro => 12, harpia => 40);
%idade{elefante} = 70;
Simples, não!
Agora, um exemplo:
Código PHP:
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 my %idade;
7 my $nome;
8 my $idade;
9 my $animal;
10 my @animais;
11 my $quantidade_animais;
12 my %mais_velho;
13 my @mais_velho;
14 my %quadrado;
15 my @numeros;
16 my $numero;
17 my $quadrado;
18
19 # Cria uma hashing vazio
20 print "Hashing vazio:\n";
21 %idade = ();
22 print %idade;
23
24 print "\n\n";
25
26 # Cria um hashing com a idade dos animais usando sintaxe de virgulas
27 print "Idade dos animais: \n";
28 %idade = ('jabuti', 80, 'rato', 3, 'cobra', 6);
29 while (($nome, $idade) = each %idade){
30 print "-$nome pode viver até os $idade anos\n";
31 }
32
33 print "\n\n";
34
35 # Adiciona mais itens ao hashing exitente usando a sintaxe de =>
36 print "Idade dos animais: \n";
37 %idade = (%idade, (tuatara => 35, cachorro => 12, harpia => 40));
38 while (($nome, $idade) = each %idade){
39 print "-$nome pode viver até os $idade anos \n";
40 }
41
42 print "\n\n";
43
44 # Adiniciona item individualmente
45 print "Idade dos animais:\n";
46 $idade{elefante} = 70;
47 while (($nome, $idade) = each %idade){
48 print "-$nome pode viver até os $idade anos \n";
49 }
50
51 print "\n\n";
52
53 # Acessando os dados de um hashing específicado pelo índice
54 $animal = 'jabuti';
55 print "A média de vida do $animal é de $idade{$animal} anos \n";
56
57 print "\n\n";
58
59 # Acessando as chaves do hashing
60 print "Os animais são:\n";
61 @animais = keys %idade;
62 foreach (@animais){
63 print "-$_ \n";
64 }
65
66 print "\n\n'";
67
68 # Acessando os valores
69 print "A idades dos animais:\n";
70 @animais = values %idade;
71 foreach (@animais){
72 print "-$_ \n";
73 }
74
75 print "\n\n";
76
77
78 # Pegando o tamanho de um hashing
79 print "Quantidade de animais:\n";
80 $quantidade_animais = keys %idade;
81 print $quantidade_animais;
82
83 print "\n\n";
84
85 # Acessando parte de um hashing
86 print "Animais que vivem mais tempo:\n";
87 @mais_velho = ('jabuti', 'elefante');
88 foreach (@mais_velho){
89 $mais_velho{$_} = $idade{$_};
90 }
91 while (($nome, $idade) = each %mais_velho){
92 print "-$nome vive $idade anos\n";
93 }
94
95 print "\n\n";
96
97 # Montando uma lista contendo o quadrado dos números
98 @numeros = (1, 2, 3, 4, 5, 6);
99 %quadrado = map { $_ => ($_ * $_) } @numeros;
100 while (($numero, $quadrado) = each %quadrado){
101 print "O quandrado de $numero é $quadrado \n";
102 }
Sigam os estudos conhecendo mais sobre hash, pois há mais informações sobre o assunto.
Agora o mais difícil pro final, faremos um array tridimensional, de forma que será mais claro de entender como fazer em qualquer dimensão!
Código PHP:
@d1_1 = (@d2_d11_1, @d2_d11_2, @d2_d11_3);
@d1_2 = (@d2_d12_1, @d2_d12_2, @d2_d12_3);
@d1_3 = (@d2_d13_1, @d2_d13_2, @d2_d13_3);
#
@d2_d11_1 = ($d3_d211_1, $d3_d211_2, $d3_d211_3);
@d2_d11_2 = ($d3_d212_1, $d3_d212_2, $d3_d212_3);
# ...
@d2_d13_3 = ($d3_d233_1; $d3_d233_2; $d3_d233_3);
# Defina agora ponto a ponto atribuindo valor a string
Complicou? Eu sei! Mas acho que apenas eu mesmo seria capaz de entender, uma vez que fui eu que criei.
Por isso, achei melhor informalos que existe como trabalhar com chaves!
Código PHP:
# Unidimensional.
my @uni = ("Primeiro", "Segundo", "Terceiro", "Quarto");
my @intervalo = ( 1 .. 50 );
my @quoted = qw(Primeiro Segundo Terceiro Quarto);
my @misto = (50, 5.1252351, "Numero");
# Bidimensional.
my @bi = (
["Primeiro", "Segundo", "Terceiro", "Quarto"],
[ 1 .. 50 ],
[ qw(Primeiro Segundo Terceiro Quarto) ],
[50, 5.1252351, "Numero"],
);
# Tridimensional.
my@tri = (
[
["Primeiro", "Segundo", "Terceiro", "Quarto"],
[ 1 .. 50 ],
[ qw(Primeiro Segundo Terceiro Quarto) ],
[50, 5.1252351, "Numero"],
],
[
["Primeiro", "Segundo", "Terceiro", "Quarto"],
[ 1 .. 50 ],
[ qw(Primeiro Segundo Terceiro Quarto) ],
[50, 5.1252351, "Numero"],
],
[
["Primeiro", "Segundo", "Terceiro", "Quarto"],
[ 1 .. 50 ],
[ qw(Primeiro Segundo Terceiro Quarto) ],
[50, 5.1252351, "Numero"],
],
);
Agora vamos acessar!
Código PHP:
$# - Retorna o total de elementos que pertence ao array.
# Unidimensional.
$uni[0]; # Acessando um elemento.
$uni[-1]; # Acessando o ultimo elemento.
for my $x (0..$#uni) { # Imprimindo todos os elementos.
print "\$uni[$x] == \"$uni[$x]\"\n";
}
# Bidimensional.
$bi[0][0]; # Acessando um elemento.
$bi[-1][-1]; # Acessando o último elemento.
for my $x (0..$#bi) { # Imprimindo todos os elementos.
for my $y (0..$#{$bi[$x]}) {
print "\$bi[$x][$y] == \"$bi[$x][$y]\"\n";
}
}
# Tridimensional.
$tri[0][0][0]; # Acessando um elemento.
$tri[-1][-1][-1]; # Acessando o último elemento.
for my $x (0..$#tri) { # Imprimindo todos os elementos.
for my $y (0..$#{$tri[$x]}) {
for my $z (0..$#{$tri[$x][$y]}) {
print "\$tri[$x][$y][$z] == \"$tri[$x][$y][$z]\"\n";
}
}
}
Espero que ajude, segue a lista de referências usadas alem de minha própria cabeça:
Ref:
http://www.perlmonks.org/?node_id=90647
http://sao-paulo.pm.org/artigo/2006/...acaoEstruturas
http://iniciandoemperl.wordpress.com/tag/hash/
http://www.tizag.com/perlT/perlhashes.php
http://www.vivaolinux.com.br/artigo/...-2%29?pagina=1
http://pt.wikibooks.org/wiki/Programar_em_C/Vetores
http://www.tizag.com/perlT/perlarrays.php
http://perlpoint.wordpress.com/2009/...array-no-perl/
http://www.htmlite.com/perl016.php