[SP-pm] Array? Hashes? Outros?

Eden Cardim eden at insoli.de
Tue Mar 12 19:39:51 PDT 2013


    Marcio> Bom, as dúvidas e dificuldades são:


    Marcio> 1. Como faço para alterar um "registro" sem precisar
    Marcio> informar todas as "colunas"? P.e.: $canais->{"canal_2"} =
    Marcio> {ativo => 0}; não dá erro, só que "perco" os outros dados
    Marcio> (Nome, Eqp, Slot, etc);

$canais->{canal_2}{ativo} = 0;

    Marcio> 2. Como pesquiso? P.e., como saber se já existe o
    Marcio> "canal_8".

exists $canais->{canal_8};

    Marcio> 3. Qual a ordem do hash? Tem como ordenar? Não é um
    Marcio> problema a ordem "aleatória" que ele fica, isso é mais por
    Marcio> curiosidade.

Não, os hashes do perl não possuem ordernação. Se quiser os registros
em alguma ordem específica você vai precisar ordenar manualmente,
fazendo algo assim:

my @registros_ordenados = @{$canais}{sort { $a cmp $b} keys %$canais}};

    Marcio> 4. No foreach eu estou percorrendo todos os "registro" e
    Marcio> imprimindo o valor das "colunas", uma a uma. Tem como
    Marcio> fazer um "foreach" na "colunas" do "registro" e imprimir
    Marcio> Nome_Da_Coluna = Valor_Da_Coluna?

Sim, cada registro é apenas outro hash, então você pode usar a função
keys neles:

for my $chave (keys %$canais) {
   print "$chave\n";
   for my $coluna (keys %{$canais->{$chave}}) {
      print "$coluna = $registro->{$coluna}\n";
   }
}

-- 
Eden Cardim -- Insolide Soluções de TI Ltda.
+55 11 9644 8225
http://insoli.de


More information about the SaoPaulo-pm mailing list