Problemas con funciones y parametros
Ing. Roberto Andrade
randrade@campus.iztacala.unam.mx
Wed, 11 Feb 1998 19:06:17 -0600 (CST)
Hola:
Ya resolv'i el problema, desde luego pasando los parametros como
referencia (Programming Perl, 2a. Ed., p. 116. Que bueno es tenerlo en
estos casos). Les paso un ejemplo:
------------------------- Inicia ejemplo -----------------------
#!/usr/bin/perl -w
use strict;
# Inicializamos los arreglos
my @letra = qw(a b c d e f);
my @color = qw(azul verde rojo);
my @size = qw(1 2 3 4 5 6 7);
# Llamamos el procedimiento
procedimiento(\@letra, \@color, \@size);
sub procedimiento {
my $i;
my ($a, $b, $c) = @_;
# Imprimimos el arreglo obtenido
print "@$a\n";
# Lo copiamos a un arreglo diferente
my @x = @$a;
my @y = @$b;
my @z = @$c;
# Imprimimos para verificar
foreach $i (@x) {
print "$i\n";
}
# Imprimimos para verificar
foreach $i (@y) {
print "$i\n";
}
# Imprimimos para verificar
foreach $i (@z) {
print "$i\n";
}
}
--------------------------- Fin de ejemplo ---------------------
Gracias a los que me enviaron sugerencias, fueron muy valiosas.
Saludos,
Roberto Andrade Fonseca
Escuela Nacional de Estudios Profesionales Iztacala
Universidad Nacional Autonoma de Mexico
Phone: (915) 623-1154, (915)623-1345
e-mail: randrade@campus.iztacala.unam.mx
On Wed, 11 Feb 1998, Salvador Ortiz Garcia wrote:
>
> Efectivamente, del manual de perl (perlsub(1)):
>
> "all functions are passed as parameters _one single_
> flat list of scalars" (subrayado mio)
>
> Si quieres pasar a una función varios arreglos lo tienes que hacer por
> referencia:
>
> sub A {
> my($a, $b, $c) = @_;
> # $b y $c son referencias a un arreglos
> $x = $c->[0]; # uso un elemento
> $y = ${$c}[0]; # o de otra forma
> my @C = @$c; # o si quiero todo el arreglo
> my @C = @{$_[2]}; # y si lo quisiera sacar directamente de los
> # parametros sin temporales.
> ...
> }
>
> A($x, \@Y, \@z);
>
> En perlfaq7(1) hay un apartado de cómo pasar (y recibir) otros tipos
> (hashes, filehandlers, etc) a funciones.
>
> Saludos.
>
> Salvador Ortiz.
>
>