• Publicidad

Valor desaparecido de una función en contexto lista

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Valor desaparecido de una función en contexto lista

Notapor explorer » 2007-06-23 05:45 @281

Del siguiente programa, publicado ayer en PerlMonks:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub foo { return; }
sub bar {
   my ($a, $b, $c) = @_;
   return if !defined $b;
   die    if !defined $c;
}
bar(1, foo(), 3);       # explodes
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Está puesto como ejemplo para rebatir la recomendación de Damian de que las funciones deben devolver con un simple return en caso de querer indicar un fallo en la función (pág. 199 del PBP).

De esa manera, en contexto lista, devolvería una lista vacía mientras que en contexto escalar devolvería un valor undef.

Pero en el ejemplo mostrado, foo() devuelve el return y es evaluado en contexto lista, por estar en mitad de los argumentos que se le pasan a bar(). La pregunta es: ¿por qué desaparece ese valor de la lista de argumentos? Sabemos que desaparece porque bar() explota en el die, queriendo decir que el argumento $c no ha sido definido (ha saltado una posición).

¿En qué parte de la documentación se menciona este efecto?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados