Si está utilizando Perl 5.10 usted tiene given
/when
que es una instrucción switch (nota, se puede hacer algo más que comparar con expresiones regulares, leer los documentos vinculados a ver todo su potencial):
#or any of the dozen other ways to tell 5.10 to use its new features
use feature qw/switch/;
given($string) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}
Si están usando Perl 5.8 o anterior debe conformarse con if
/elsif
/else
declaraciones:
if ($string =~ /^abc/) { $abc = 1; }
elsif ($string =~ /^def/) { $def = 1; }
elsif ($string =~ /^zyz/) { $xyz = 1; }
else { $nothing = 1; }
o anidado condition operators (?:
):
$string =~ /^abc/ ? $abc = 1 :
$string =~ /^def/ ? $def = 1 :
$string =~ /^xyz/ ? $xyz = 1 :
$nothing = 1;
Hay un módulo en el núcleo de Perl (Switch) que le da instrucciones switch falsos a través de source filters, pero es mi entendimiento de que es fragile:
use Switch;
switch ($string) {
case /^abc/ {
case /^abc/ { $abc = 1 }
case /^def/ { $def = 1 }
case /^xyz/ { $xyz = 1 }
else { $nothing = 1 }
}
o la sintaxis alternativa
use Switch 'Perl6';
given ($string) {
when /^abc/ { $abc = 1; }
when /^def/ { $def = 1; }
when /^xyz/ { $xyz = 1; }
default { $nothing = 1; }
}
El módulo Switch es parte de Core Perl, y lo ha sido desde 5.8, por lo que no hay ningún problema de dependencia; sin embargo, tiene algunos errores y limitaciones. Consulte los documentos para obtener más información, o mejor aún, actualice a 5.10 y obtenga una declaración de cambio, operador de coincidencia inteligente, por ejemplo, función, variables de estado, un host de mejoras de expresiones regulares, definido o (//), operadores de prueba de archivos apilados (- r -x $ archivo en lugar de -r $ archivo && -x _), y una serie de otras mejoras. –
@lurks, es posible que desee seleccionar una respuesta diferente. –