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.