[Cascavel-pm] Sort em array de hash.
Rod Za
rodzadra em yahoo.com
Quinta Dezembro 8 09:49:11 PST 2005
--- "Alceu R. de Freitas Jr." <glasswalk3r em yahoo.com.br> wrote:
> Você está querendo correr do problema mas ele está
> correndo atrás de você até o servidor web. Se o IPP
> não está sendo flexível, porque não criar um parse
> desses arquivos, instalar um SGBD na máquina do CUPS e
> fazer queries diretamente de lá? Você pode fazer as
> atualizações depois via CRONTAB.
Acho que eu estava com problema de BIOS*, hehehehe! :)
Resolvi dar uma esfriada na cabeça, jogando Unreal Tournamente 2004 por 2 dias seguidos e resolvi
o problema. Prestei a atenção no que vc e o Gilmar tinham me passado e vi que o problema estava no
modo em como estava tratando [a|o] HASH que recebia do módulo!
Resolvi transformá-la em uma estrutura um pouco diferente em vez de um ARRAY de HASH fiz o
contrário :) e ficou perfeito agora.
Substitui o código:
<perl>
sub show_ppd(){
my $maker = shift;
my $HASH;
my $i;
foreach my $r ( doIPPrequest( "http://localhost:631",
'type' => CUPS_GET_PPDS,
'attr' => { 'ppd-make' => { 'type' => TAG_KEYWORD,
'value' => $maker,
},
}
)
){
next if($r->{'ppd-make'} eq undef);
next if($r->{'ppd-make'} ne $maker and (defined $maker));
$i->{$r->{'ppd-make'}} = 0 if(!defined($i->{$r->{'ppd-make'}}));
$HASH->{ $r->{'ppd-make'} }[$i->{$r->{'ppd-make'}}] =
{ ppd_model => $r->{'ppd-make-and-model' },
ppd_driver => $r->{'ppd-name' },
ppd_lang => $r->{'ppd-natural-language'}
};
$i->{$r->{'ppd-make'}}++;
}
return $HASH;
}
</perl>
por:
<perl>
sub show_ppd(){
my %HASH;
my $i;
foreach my $r ( doPPDrequest( "http://localhost:631",
'type' => CUPS_GET_PPDS,
'attr' => { 'ppd-make' => { 'type' => TAG_TEXT,
'value' => $maker,
},
}
)
){
next if($r->{'ppd-make'} eq undef);
next if($r->{'ppd-make'} ne $maker and (defined $maker));
$i->{$r->{'ppd-make'}} = 0 if(!defined($i->{$r->{'ppd-make'}}));
%HASH->{ $r->{'ppd-make'} }[$i->{$r->{'ppd-make'}}] = [
$r->{'ppd-make-and-model' } ,
$r->{'ppd-name' },
$r->{'ppd-natural-language'}
];
$i->{$r->{'ppd-make'}}++;
}
return %HASH;
}
</perl>
E depois apliquei a função sort, conforme vcs sugeriram:
<perl>
my %a=show_ppd();
@out = sort { $a->[0] cmp $b->[0] } @{%a->{$maker}};
</perl>
> Que é isso! Está divertido! :-D
Valeu pelas idéias! :)
Um grande abraço,
Rodrigo.
ps: *para quem não sabe BIOS = "Burro Ignorante Operando o Sistema"! (no caso eu mesmo!) :)
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Mais detalhes sobre a lista de discussão Cascavel-pm