Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Devolver (return) más de un valor de una función

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mie Ago 06, 2008 8:45 am
escanda
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2008
Mensajes: 28
Devolver (return) más de un valor de una función Responder citando

Hola, ¿qué tal? Como verán soy principiante en esto y quería saber si se puede y cómo es para que una función me devuelva más de un valor, para luego llamar a cada una de las variables devueltas y que tengan el valor devuelto en la función.

Gracias.
Mensaje Mie Ago 06, 2008 8:53 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Perl:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

sub funcion {
    return 'a', 1, 'd', 3.2, sqrt(2);
}

my ($letra,$valor,$otraletra,$otrovalor,$raiz) = funcion();

print "$letra,$valor,$otraletra,$otrovalor,$raiz\n";

__END__
Solo tienes que devolver eso, una lista de valores. Si son muchos, entonces es mejor usar la técnica de devolver una referencia a la estructura que almacena esos valores.
Mensaje Mie Ago 06, 2008 8:56 am
teco000
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2008
Mensajes: 33
Ubicación: Guatemala
Responder citando

YO APRENDÍ CON ESTE MANUAL QUE ME ENVIÓ KIDD
http://perlenespanol.baboonsoftware.com/tutoriales/funciones/crea_tus_propias_funciones.html
Mensaje Mie Ago 06, 2008 9:20 am
escanda
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2008
Mensajes: 28
Responder citando

Gracias por la respuesta, explorer, pero he probado exactamente eso y no funciona. ¿Otra alternativa?

Gracias.
Mensaje Mie Ago 06, 2008 10:19 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

¿Qué quieres decir que no funciona? Yo pruebo todos los códigos que publico salvo en aquellos que pongo la frase 'no probada'.

A mi la función sí que me devuelve varios valores... ¿seguro que lo has probado bien? ¿Qué es lo que te devuelve?
Mensaje Mie Ago 06, 2008 10:34 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

O mejor, ¿por qué no pones el código que deseas usar?
Mensaje Jue Ago 07, 2008 10:32 am
escanda
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2008
Mensajes: 28
Responder citando

Gracias por todo, ya he logrado resolver el problema, faltaba ponerle un & delante de funcion():
Perl:
my ($letra,$valor,$otraletra,$otrovalor,$raiz) = &funcion();


Muchas gracias.
Mensaje Jue Ago 07, 2008 10:39 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Eso es porque has puesto la definición de la función DESPUÉS de donde la usas.

Y que tienes un Perl muy antiguo.
Mensaje Vie Ago 08, 2008 5:41 pm
Jenda
Perlero Frecuente
Perlero Frecuente
Registrado: 29 Oct 2007
Mensajes: 106
Ubicación: Praga, Republica Checa
Responder citando

No es verdad. No hay ninguna diferencia entre
Perl:

my ($letra,$valor,$otraletra,$otrovalor,$raiz) = &funcion();

y
Perl:

my ($letra,$valor,$otraletra,$otrovalor,$raiz) = funcion();

Y no depende de la posición de la definición de function(). Si hay esos (), no es necesario el &.

PERO se debe solo usar & con \ cuando quieres tomar la referencia de la función. Solamente en ese caso. La cosa es que &funcion puede hacer algo diferente de lo que quieres. Si haces
Perl:

my ($letra,$valor,$otraletra,$otrovalor,$raiz) = &funcion;

eso significa algo un poquito diferente de las líneas anteriores. En este caso la función recibe, como parámetros, todo lo que contiene @_. Por ejemplo:

Perl:
sub foo {
  print "Params: ( '", join("', '", @_), "' )\n";
}

sub bar {
 print "Primero:\n";
 foo();
 print "Segundo:\n";
 &foo();
 print "Tercero:\n";
 &foo;
}

bar(1,2,3);
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group