[Cascavel-pm] Transformando em objeto

Adriano Ferreira a.r.ferreira em gmail.com
Quinta Novembro 30 04:57:05 PST 2006


On 11/30/06, Leonardo Soares <lsmsoares em gmail.com> wrote:
> Prezados Senhores,
>
>
> Sou novato em Perl (2 meses) e estou trasnformando em objeto um programa.
>
> Eu me deparei com o seguinte problema: Transformar a seguinte linha de
> código
>
>  $num_dados = $#datax;
>
> Em algo do tipo:
>
>  $self->{num_dados} = ???????;

$self->{num_dados} = $#datax;  #  ?!?!

Esta seria a resposta se, no seu projeto, você estivesse transformando
a variável $num_dados em um atributo do objeto (representado como um
hash abençoado), e tivesse os mesmos dados no mesmo array @datax. No
entanto se @datax também é para ser transformado em um atributo do
objeto, ele tem de ser transformado em referência (porque apenas
referências são guardadas em um hash) e você poderia usar algo como

$self->{num_dados} = scalar @{$self->{datax}} - 1;

Ah, e de qualquer jeito, a prudência e a canja de galinha recomendam
que você use para determinar o tamanho de um array - 1 a expressão

     scalar @a - 1

ao invés de

     $#a

porque alguém (ou algum pedaço de código) malvado pode mexer com $[ e
lhe trazer resultados inesperados. Leia sobre isto em 'perldoc
perlvar'.

Exemplos:

$ perl -e '@a = (1,2); print $#a'
1

$ perl -e '@a = (1,2); $[ = 1; print $#a'
2                              -> epa! isto é     $[ + scalar @a - 1
                               -> porque a mal comportada variável $[
                               -> permite mudar o primeiro índice de
todos arrays

$ perl -e '@a = (1,2); print scalar @a - 1'
1

$ perl -e '@a = (1,2); $[ = 1; print scalar @a - 1'
1                               -> continua o mesmo

>
> Como fica ?????
>
>
> Saudações,
>
> Leo.
>
> --
> Meu Blog:
>  http://mundoaoleo.blogspot.com/
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
>


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