[Cascavel-pm] Dúvida de Biotecnologia

Luis Campos de Carvalho lechamps em terra.com.br
Quarta Setembro 17 09:18:33 CDT 2003


> Luis Campos de Carvalho wrote:
>>
>>   Agora vamos ver a explicação:
>>
>>   Quando você diz $divide[$x], está se referindo ao $x-ésimo ESCALAR
>>(Exatamente UMA coisa) contido no ARRAY @divide.
>>
>>   Quando você diz @divide[$x], está se referindo na verdade a um ARRAY
>>de escalares (MUITAS coisas) que na pratica tem apenas o elemento de
>>índice $x no ARRAY @divide.
>>
>>   Para efeito de algorítmo, os dois praticamente tem o mesmo
>>significado. Mas isso pode mudar MUITO se você não controlar MUITO BEM
>>que valores $x pode assumir. Isso pode vir até mesmo a ser perigoso,
>>dependendo do restante do seu programa.
>>
>>   As boas práticas de programação Perl dizem que você deve usar '$'
>>como prefixo sempre que se referir a uma variável contendo um escalar, e
>>'@' sempre que se referir a uma variável contendo mais de um escalar
>>(array).
>>
>>   Exemplo:
>>
>>   o array 'divide' (muitos elementos):
>>
>>   @divide;
>>
>>   o terceiro elemento do array divide (um elemento só):
>>   $divide[2];
>>
>>   o terceiro, quarto e quinto elementos do array divide (muitos elementos):
>>
>>   @divide[2,3,4];
>>
>>   Os 5 últimos elementos do array divide (muitos elementos):
>>
>>   @divide[-5, $#divide];
>>
>>   Espero que isso deixe claro o que se pode fazer com ARRAYs e ESCALAREs.

Adriano Vivan Borro wrote:
 > Legal, Luis. Vou estudar e inserir essas rotinas para teste.

   Boa sorte.

 > Agora, no final do email, soh pra ver c eu entendi mesmo...
 > Vc diz q, sempre q utilizo @, me refiro a um array. E $ a
 > um escalar. Isto quer dizer q, c eu usar @divide[$x] vou
 > perder em muito em eficiencia, jah que minha rotina
 > rodarah diversas vezes, utilizando-se sempre de arrays
 > ao inves de escalares?

   Quase, Adriano.
   Você está chegando perto. =-]
   Está correta a sua noção sobre usar '$' quando você se referir a um 
escalar, e '@' quando você se referir a um array. Mas está incorreto 
pensar que o Perl vai "criar" loops no seu programa.

   O que acontece realmente quando você escreve @divide[$x] é que o 
compilador gasta muito mais memória, se preparando para a chegada de uma 
"lista" (/slice/), retirada do array @divide, e você indica apenas UM 
valor (o que caberia perfeitamente em um escalar). Desta forma, o Perl 
aloca muito mais memória do que o necessário, e o /footprint/ de memória 
do seu programa cresce muito.

   Em outras palavras: diga sempre $divide[$x], que o Perl gasta menos 
memória para fazer a mesma coisa que você conseguiria com @divide[$x].

   À sua disposição para mais explicações,
   []'z!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho is Computer Scientist,
   PerlMonk [SiteDocClan], Cascavel-pm Moderator,
   Unix Sys Admin && Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm