Fw: [Perl] equivalencia de un case
Salman PSL
correo@salman.net
Wed, 13 Mar 2002 12:19:51 +0100
Pues indudablemente por sencillez y limpieza me gusta mas la opción del hash
: my %Maps = (
: '0001' => 'Mensaje número uno',
: '0002' => 'Mensaje número dos',
: # Etc;
: };
Y como todos los mensajes que se llamen tienen que existir o existirán, la llamada
seria mas directa incluso:
print $Maps{'0001'};
Gracias tocayo
Saludos
Salvador Guzmán
Salman PSL
Vigo, Galicia, España
+34 986-21.30.27
+34 627-505-999
Correo@Salman.ES
http://salman.net/
http://aseara.com/
----- Mensaje original -----
De: "Salvador Ortiz Garcia" <sog@msg.com.mx>
Para: "Salman PSL" <correo@salman.net>
CC: "Lista de perl" <perl@tlali.iztacala.unam.mx>
Enviado: martes, 12 de marzo de 2002 21:11
Asunto: Re: [Perl] equivalencia de un case
: On Tue, 2002-03-12 at 13:42, Salman PSL wrote:
: > Voy a implementar en una programacion que tengo operativa en PERL un modulo de
traduccion por llamarlo de alguna forma.
: >
: > Se trata de hacer algo como el sistema que utiliza el php-nuke
: >
: > Pero PERL no tiene ninguna sentencia equivalente.
: >
: > A mi se me ha ocurrido lo siguiente:
: >
: > sub TomarMensaje {
: > my ($MensajeNumero) = @_ ;
: > SWITCH:
: > {
: > if ($MensajeNumero eq "0001") { $MensajeTexto="Mensaje Numero uno"; last
SWITCH; }
: > if ($MensajeNumero eq "0002") { $MensajeTexto="Mensaje Numero DOS"; last
SWITCH; }
: > }
: >
: > return $MensajeTexto;
: > }
: >
: > ¿ A alguien se le ocurre algo mas elegante y sencillo ?
: >
:
: Si te gusta la idea del 'case', se ve mejor asi:
:
: sub TomarMensaje {
: my $MensajeNumero = shift;
: for($MensajeNumero) {
: /^0001$/ && do { $MensajeTexto='Mensaje número uno'; last };
: /^0002$/ && do { $MensajeTexto='Mensaje número dos'; last };
: # Etc.
: $MensajeTexto = "Ninguno de los anteriores'; # Caso default
: }
: return $MensajeTexto;
: }
:
: Y por supuesto te puedes ahorar el $MensajeNumero con un "for($_[0]) {"
: y el $MensajeTexto si usas return directo.
:
: Ahora que, a mi me gusta más usando un hash:
:
: my %Maps = (
: '0001' => 'Mensaje número uno',
: '0002' => 'Mensaje número dos',
: # Etc;
: };
:
: sub TomarMensaje {
: my $MensajeNumero = shift;
: return exists $Maps{$MensajeNumero}
: ? $Maps{$MensajeNumero}
: : 'Ninguno de los anteriores';
: }
:
: En donde incluso y si estás seguro que no tienes mensajes "falsos",
: puedes dejar como:
:
: sub TomarMensaje {
: return $Maps{$_[0]} || 'Ninguno de los anteriores';
: }
:
:
: Saludos.
:
: Salvador Ortiz.