Declaración del interruptor de Perl

UN switchLa declaración permite probar la igualdad de una variable con una lista de valores. Cada valor se llama caso, y la variable que se enciende se verifica para cadaswitch case.

La implementación de un caso de conmutador depende de Switch módulo y SwitchEl módulo se ha implementado utilizando Filter :: Util :: Call y Text :: Balanced y requiere la instalación de ambos módulos.

Sintaxis

La sinopsis de un switch declaración en el lenguaje de programación Perl es la siguiente:

use Switch;

switch(argument) {
   case 1            { print "number 1" }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case /\w+/        { print "pattern" }
   case qr/\w+/      { print "pattern" }
   case (\%hash)     { print "entry in hash" }
   case (\&sub)      { print "arg to subroutine" }
   else              { print "previous case not true" }
}

Las siguientes reglas se aplican a switch declaración -

  • los switch La sentencia toma un único argumento escalar de cualquier tipo, especificado entre paréntesis.

  • El valor va seguido de un bloque, que puede contener una o más declaraciones de caso seguidas de un bloque de declaraciones de Perl.

  • Una declaración de caso toma un solo argumento escalar y selecciona el tipo apropiado de coincidencia entre el argumento de caso y el valor de cambio actual.

  • Si la coincidencia tiene éxito, se ejecuta el bloque obligatorio asociado con la declaración del caso.

  • UN switch declaración puede tener un opcional elsecaso, que debe aparecer al final del interruptor. El caso predeterminado se puede utilizar para realizar una tarea cuando ninguno de los casos coincide.

  • Si un bloque de casos ejecuta un next, el control se transfiere inmediatamente al enunciado después del enunciado del caso (es decir, generalmente otro caso), en lugar de salir del bloque de interruptores circundante.

  • No todos los casos deben contener un next. Si nonextaparece, el flujo de control no caerá en los casos posteriores.

Diagrama de flujo

Ejemplo

#!/usr/local/bin/perl

use Switch;

$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);

switch($var) {
   case 10           { print "number 100\n" }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case (\%hash)     { print "entry in hash" }
   else              { print "previous case not true" }
}

Cuando se ejecuta el código anterior, produce el siguiente resultado:

number 100

Fall-aunque suele ser una mala idea en una declaración de cambio. Sin embargo, ahora considere un caso fallido, usaremos elnext para transferir el control al siguiente caso coincidente, que es una lista en este caso -

#!/usr/local/bin/perl

use Switch;

$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);

switch($var) {
   case 10           { print "number 100\n"; next; }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case (\%hash)     { print "entry in hash" }
   else              { print "previous case not true" }
}

Cuando se ejecuta el código anterior, produce el siguiente resultado:

number 100
number in list