[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