[Cascavel-pm] Como passar arrays para funções... [Was: Duvida $dbh->prepare]

Caio Marcelo cmarcelo em gmail.com
Sexta Janeiro 26 05:41:26 PST 2007


Olá,

On 1/26/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
> On Jan 26, 2007, at 12:17 PM, Patty Silva wrote:
> > em minha subrotina eu tento passar assim:
> > my ($ids, em datas,$variavels)=@_;

>    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.

Fiquei na dúvida de quais eram exatamentes os requisitos do problema (manter
o ($a, @b, $c) = @_, ou permitir que possam ser passados sem ter que criar
a referência). Acabei fazendo o seguinte:

use strict;
use warnings;

sub f {
	my ($a, @b, $c) = @_;
	print "$a | @b | ". ($c ? $c : "NADA") . "\n";
}

sub g ($\@$) {
	my ($a, $bb, $c) = @_;
	my @b = @$bb;
	print "$a | @b | $c\n";
}

my @arr = (1,2,3);

f('Perl', @arr, 'Cascavel');
g('Perl', @arr, 'Cascavel');

E a saída é:
Perl | 1 2 3 Cascavel | NADA
Perl | 1 2 3 | Cascavel


Pelo menos no quesito chamar passando um array no meio a coisa funciona, apesar
de poder ficar meio confuso, a pessoa achar que pode colocar uma lista
no lugar da @arr, porém isto não funciona.


Cheers,
Caio Marcelo


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