[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