RE: [Cascavel-pm] Funções com argumentos de arrays
Luis Campos de Carvalho
monsieur_champs em yahoo.com.br
Sexta Janeiro 6 09:25:42 PST 2006
Claro que não funciona. Você não leu o manual.
Aqui tem meu exemplo, já que vocês funcionam apenas à base de exemplos...
__PERL__
use strict;
use warnings;
use Data::Dumper;
# teste para exemplificar o uso de templates de subrotinas
sub my_sub ( \@ $ \@ ) {
my @args = @_;
print "Despejando argumentos coletados:\n";
print Dumper( @args );
print "\n"x2;
# derreferenciando o argumento #1 (para um array)
my @array_1 = @{$args[0]};
# o argumento #2 não precisa ser derreferenciado (é um escalar)
my $scalar = $args[1];
# derreferenciando o argumento #3 (para outro array)
my @array_2 = @{$args[2]};
# Imprime a família toda agora...
print "Array #1:\n", Dumper( @array_1 ), "\n\n";
print "Escalar: $scalar\n\n";
print "Array #2:\n", Dumper( @array_2 ), "\n\n";
# fim!
}
my @a = qw( primeiro array );
my @b = qw( segundo array );
my $calar = 'escalar';
# Repare na elegância da minha chamada:
# ela parece até com uma palavra-chave do perl...
my_sub @a, $calar, @b;
__END__
Putamplexos desapontados!
--- Brinde Storm - Steven Koch <s.koch em brindestorm.com> escreveu:
> Digamos então:
> <perl>
> @a = ('a1','a2','a3','b1','b2','b3');
> @b = ('x1','w1','v1');
>
> print "@a"."\n em b\n\n" ;
>
> minha_funcao(@a, 3, @b);
>
> sub minha_funcao(\@, \$,\@ ){
> my( $arr_ref1, $scalar, $arr_ref2 ) = @_;
>
> print "\n
> array= @{$arr_ref1} \n
> lugar = ${$scalar} \n
> elementos = @{$arr_ref2}
> \n";
> }
> </perl>
>
> Mas não imprime nada
>
>
>
>
> -----Mensagem original-----
> De: cascavel-pm-bounces em pm.org [mailto:cascavel-pm-bounces em pm.org] Em nome
> de Luis Campos de Carvalho
> Enviada: sexta-feira, 6 de Janeiro de 2006 16:49
> Para: Cascavel Perl Mongers
> Assunto: RE: [Cascavel-pm] Funções com argumentos de arrays
>
>
> Claro que pode!
> Mas deve passar referências para os arrays, não os próprios arrays!
>
> Assim:
>
> @array = qw( isto eh um array de palavras );
> $referencia_para_array = \@array;
>
> minha_funcao( $referencia_para_array );
>
> # ou, mesma coisa, mas mais simples:
> minha funcao( \@array );
>
> # Se precisar passar mais de um, pode fazer assim:
> outra_funcao( \@array1, \@array2, \@array3 );
>
> # pode passar quantos arrays quiser.
>
> Putamplexos!
>
> --- Brinde Storm - Steven Koch <s.koch em brindestorm.com> escreveu:
>
> > Não posso passar mais de um array como argumento??
> >
> > -----Mensagem original-----
> > De: cascavel-pm-bounces+s.koch=brindestorm.com em pm.org
> > [mailto:cascavel-pm-bounces+s.koch=brindestorm.com em pm.org] Em nome de
> > Brinde Storm - Steven Koch
> > Enviada: sexta-feira, 6 de Janeiro de 2006 16:35
> > Para: 'Cascavel Perl Mongers'
> > Assunto: RE: [Cascavel-pm] Funções com argumentos de arrays
> >
> > Quer dizer q se eu criar um pacote com funções e depois querer que
> > outros a utilizem tenho que seguir este isso, arrays no final?
> >
> > -----Mensagem original-----
> > De: cascavel-pm-bounces em pm.org [mailto:cascavel-pm-bounces em pm.org] Em
> > nome de Marco Lima
> > Enviada: sexta-feira, 6 de Janeiro de 2006 16:19
> > Para: Cascavel Perl Mongers
> > Assunto: Re: [Cascavel-pm] Funções com argumentos de arrays
> >
> > use referência !
> >
> > para passar uma lista vc soh conseguiria no final tipo ..
> >
> > minhaFuncao($pos, @args2);
> >
> > Mas isso naum eh bom ... por isso referencie sua lista e passe a
> > referencia dela.
> >
> > [ ]'s
> >
> > > Como posso fazer isso em Perl
> > >
> > > minhaFuncao( @args1, $pos, @args2);
> > >
> > > Fiz isso mas não esta a funcionar:
> > >
> > > sub minhaFuncao(){
> > > my(@args1, $pos, @args2) = @_;
> > > ...
> > > }
> > >
> > > =P
> > >
> > > _______________________________________________
> > > Cascavel-pm mailing list
> > > Cascavel-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/cascavel-pm
> > >
> > >
> >
> > --
> >
> > Marco Lima
> > J. A. P. H.
> >
> > marco.lima em e-via.com.br
> > mago em rio.pm.org
> > mago em cpan.org
> >
> > Sociedade Perl do Brasil | http://www.perl.org.br
> > Perl Monks | http://www.perlmonks.org
> > Brasil Perl Mongers | http://brasil.pm.org
> >
> > Register Linux User #355235
> > Slackware Linux, for the subgenius
> >
> > "Ninguém é tão grande que não possa aprender, e nem tão pequeno que
> > não possa ensinar"
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
>
>
> --
> Luis Campos de Carvalho
> Member of "São Paulo Perl Mongers",
> Unix SysAdmin & OCP/DBA Oracle
>
>
>
>
>
>
>
>
> _______________________________________________________
> Yahoo! doce lar. Faça do Yahoo! sua homepage.
> http://br.yahoo.com/homepageset.html
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle
_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html
Mais detalhes sobre a lista de discussão Cascavel-pm