[SP-pm] Packing!

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Abril 25 00:28:53 PDT 2007


On Apr 25, 2007, at 1:28 AM, Henrique Rennó wrote:
> Fala Fred!
>
> Acho que em perl não existe uma forma de declarar matrizes de duas  
> dimensões. Para acessar elementos na forma matrix[i][j] fiz um  
> array de referências e funciona.
>
> my @matrix;
> my $valor = 88;
> for $i (0 .. rows-1)
> {
> my @tmp;
> for $j (0 .. cols-1)
> {
> push @tmp, $valor;
> }
> push @matrix, [@tmp];
> }
>
> Depois para acessar os elementos seria $matrix[$i][$j]. Há muito  
> tempo sempre fiz dessa forma mas hoje tive a curiosidade de saber o  
> que o pack() faria com esse array de arrays de floats.
>
> Queria saber se o pack() foi feito para receber uma matriz (o array  
> de referências) e concatenar os valores (de cada array apontado por  
> cada referência), mas acho que não faz não. Ele deve acessar os  
> valores das referências. Passando a formatação "f" seria como uma  
> conversão de endereço de memória para float.
>
> Será que tem alguma forma de fazer um pack() de matriz direto sem  
> iterar???

   Sim, você pode extender Perl para fazer isso, usando XS.
   Ou pode simplesmente construir um módulo para resolver seu  
problema, e implementar uma função que resolva isso.
   Não, não vai ser possível fazer isso sem iterar, a não ser que  
você não conte loops implementados em C e linkados ao Perl com XS...

   Para saber mais sobre o pack() e o unpack(), RTFM(*): perldoc -f  
pack ; perldoc -f unpack

   Espero que isso ajude.
   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}

(*): Read The Fine Manuals – Leia Manuais Legais.


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