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