Resultados 1 a 4 de 4
  1. #1
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955

    [TUTORIAL][Perl] Use um array

    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 xyz/*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 @= (‘a’‘b’‘c’); 
    Mas se eu precisar acessar apenas um desses 3 dados, eu faço:
    Código PHP:
    my @= (‘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 @= (‘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 => 35cachorro => 12harpia => 40);
    %
    idade{elefante} = 70
    Simples, não!
    Agora, um exemplo:
    Código PHP:
    #!/usr/bin/perl
      

      3 
    use warnings;
      
    use strict;
      

      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 => 35cachorro => 12harpia => 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 = (123456);
     
    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 = ( .. 50 );
       
    my    @quoted qw(Primeiro Segundo Terceiro Quarto);
       
    my     @misto = (505.1252351"Numero");

     


     


       
    # Bidimensional.
       
    my        @bi = (
                        [
    "Primeiro""Segundo""Terceiro""Quarto"],
                        [ 
    .. 50 ],
                        [ 
    qw(Primeiro Segundo Terceiro Quarto) ],
                        [
    505.1252351"Numero"],
                       );

     


     


       
    # Tridimensional.
       
    my@tri = (
                        [
                         [
    "Primeiro""Segundo""Terceiro""Quarto"],
                         [ 
    .. 50 ],
                         [ 
    qw(Primeiro Segundo Terceiro Quarto) ],
                         [
    505.1252351"Numero"],
                        ],
                        [
                         [
    "Primeiro""Segundo""Terceiro""Quarto"],
                         [ 
    .. 50 ],
                         [ 
    qw(Primeiro Segundo Terceiro Quarto) ],
                         [
    505.1252351"Numero"],
                        ],
                        [
                         [
    "Primeiro""Segundo""Terceiro""Quarto"],
                         [ 
    .. 50 ],
                         [ 
    qw(Primeiro Segundo Terceiro Quarto) ],
                         [
    505.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
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  2. #2
    Membro Avatar de podolcee
    Data de Ingresso
    Jan 2011
    Localização
    Crecendo ...
    Posts
    241
    Muito bom gostei dos exemplos !
    ai tem um dos scripts você usou o \a para dá um som de bip KKK
    Não mexe comigo eu sou Feroz !

  3. #3
    Muito legal ,mas não sei se no perl a string também tem que ser terminada com o null terminator,mas se for ficou faltando mencionar isso e adicionar nos exemplos.
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  4. #4
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    R0Dr1g0, creio que não, pelomenos eu mesmo nunca usei null terminator, nem mesmo vi usando.

    Acho que por isso que você não gosta muito, ne? Não tem muito regras de organização! hahaha
    Inclusive esse fato justifica o por que é considerada uma linguagem a a sintaxe horrivel,
    mas o problema não é da linguagem em si, e sim de cada programador,
    que programa como bem entende, e as vizes isso torna muit obscuro de interpretar o codigo!!!
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •