switch
de C usando
un hash de punteros a subrutinas. Escriba una
función switch
que recibe como segundo parámetro un hash
con claves las constantes del case
y como
valores las referencias a las subrutinas. Cómo primer
parámetro recibe un valor escalar. Según sea el valor
deberá ejecutar la subrutina con clave correspondiente.
Si no hay ninguna clave con ese valor deberá de ejecutar
la subrutina que corresponde a la clave default
,
si tal clave existe en el hash.
Aqui tiene una indicación de como hacerlo:
lhp@nereida:~/Lperl/src$ cat switch.pl #!/usr/local/bin/perl -w use strict; use warnings; sub switch { my $exp = shift or die "switch error: expecting an expression\n"; die "switch error. Empty cases\n" unless @_; my %cases = @_; if (exists($cases{$exp})) { die "switch error. Expected code for <$exp>\n" unless ref($cases{$exp}) eq 'CODE'; ........................ } .......................... } my $x = 4; switch $x, 2 => sub { print "two\n" }, 3 => sub { print "three\n" }, 4 => sub { print "four\n" }, default => sub { print "Other value\n" } ;
En el ejemplo que haga para la llamada a la función
switch
use subrutinas
anónimas cuando el código en cuestión lleve menos de
una lınea.
El módulo Switch
de Damian Conway proporciona
una sentencia switch
mas completa.
Sigue un ejemplo de uso:
$ cat -n useswitch.pl 1 #!/usr/local/bin/perl5.8.0 -w 2 3 use Switch; 4 5 $val = shift; 6 7 switch ($val) { 8 case 1 { print "number 1\n" } 9 case "hello" { print "string hello\n" } 10 else { print " none of these two\n" } 11 }
Casiano Rodríguez León