[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