[Cascavel-pm] Como passar arrays para funções... [Was: Duvida $dbh->prepare]
Luis Motta Campos
luismottacampos em yahoo.co.uk
Sexta Janeiro 26 05:14:12 PST 2007
On Jan 26, 2007, at 12:17 PM, Patty Silva wrote:
> Invez deu colocar ?=? eu coloco $variavel=?
> Ai funcionou...
Mais importante que funcionar é você entender por que.
Entendeu por quê?
> So + uma duvida..
/me lança um olhar de reprovação sobre todos os membros desta
lista de discussão que não se preocuparam em mudar o tópico das
mensagens, acompanhando a mudança de assunto e ao mesmo tempo
permitindo que a lista continue se organizando por threads e assuntos.
(Relaxa, Patty, que desta vez quem pisou no tomate foram as
"raposas" da lista... eheheheh)
> em minha subrotina eu tento passar assim:
> my ($ids, em datas,$variavels)=@_;
> |______________________
>
> |
> Minha duvida eh.. eu posso passar um ARRAY??
Patty, em Perl a gente pode fazer praticamente qualquer coisa.
O problema é saber se interessa.
Isso que você quer fazer é possível (desafio: alguém sabe COMO
fazer? FGlock: você, não vale...), mas pode ficar chato de entender
para outras pessoas.
Existem duas possibilidades para resolver este problema:
1. Coloque o seu array no final da lista de argumentos
sub my_sub {
my ( $a, $b, $c, @remaining ) = @_;
# blah blah blah
}
e chama assim:
my_sub( $d, $e, $f, $g, $h, $i, @jkl );
E você vai acabar com os valores de $a em $d; $b em $e; $c em $f;
e $g, $h, $i, e @remaining vão ser "agrupados", na ordem em que
estão, em @jkl.
2. Use referências:
sub my_sub {
my ( $a, $b, @jkl ) = ( shift, shift, @{ +shift } );
# bla bla bla
}
e chama assim:
my_sub( $a, $b, \@remaining );
A diferença é sutil: o operador '\' "constrói" referências, que
são uma espécie de ponteiro seguro. Por outro lado, dentro da sub, o
operador de de-referência de referências de array "@{}" faz o
trabalho contrário, "transformando" a referência do array na "coisa"
outra vez.
Espero que esteja claro.
Putamplexos.
--
Luis Motta Campos is software engineer,
perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão Cascavel-pm