Mie Ago 06, 2008 8:45 am
|
 |
escanda
Perlero Nuevo

|
Registrado: 11 Jul 2008
Mensajes: 28
|
|
| Devolver (return) más de un valor de una función |
|
|
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. |
|
|
|
Mie Ago 06, 2008 8:53 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|
Mie Ago 06, 2008 8:56 am
|
 |
teco000
Perlero Nuevo

|
Registrado: 29 May 2008
Mensajes: 33
Ubicación: Guatemala
|
|
|
|
Mie Ago 06, 2008 9:20 am
|
 |
escanda
Perlero Nuevo

|
Registrado: 11 Jul 2008
Mensajes: 28
|
|
|
|
|
Gracias por la respuesta, explorer, pero he probado exactamente eso y no funciona. ¿Otra alternativa?
Gracias. |
|
Mie Ago 06, 2008 10:19 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
¿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? |
|
Mie Ago 06, 2008 10:34 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
| O mejor, ¿por qué no pones el código que deseas usar? |
|
Jue Ago 07, 2008 10:39 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Vie Ago 08, 2008 5:41 pm
|
 |
Jenda
Perlero Frecuente

|
Registrado: 29 Oct 2007
Mensajes: 106
Ubicación: Praga, Republica Checa
|
|
|
|
|
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); |
|
|

Powered by phpBB © 2001, 2005 phpBB Group
|