Déclaration de commutateur Perl

UNE switchL'instruction permet à une variable d'être testée pour l'égalité par rapport à une liste de valeurs. Chaque valeur est appelée un cas et la variable activée est vérifiée pour chaqueswitch case.

Une implémentation de boîtier de commutation dépend de Switch module et Switchmodule a été implémenté en utilisant Filter :: Util :: Call et Text :: Balanced et nécessite l'installation de ces deux modules.

Syntaxe

Le synopsis d'un switch L'instruction en langage de programmation Perl est la suivante -

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" }
}

Les règles suivantes s'appliquent à un switch déclaration -

  • le switch L'instruction prend un seul argument scalaire de n'importe quel type, spécifié entre parenthèses.

  • La valeur est suivie d'un bloc, qui peut contenir une ou plusieurs instructions case suivies d'un bloc d'instructions Perl.

  • Une instruction case prend un seul argument scalaire et sélectionne le type de correspondance approprié entre l'argument case et la valeur de commutation actuelle.

  • Si la correspondance réussit, le bloc obligatoire associé à l'instruction case est exécuté.

  • UNE switch l'instruction peut avoir une option elsecas, qui doit apparaître à la fin du commutateur. Le cas par défaut peut être utilisé pour exécuter une tâche lorsqu'aucun des cas ne correspond.

  • Si un bloc de cas exécute un non ciblé next, le contrôle est immédiatement transféré à l'instruction après l'instruction case (c'est-à-dire généralement un autre cas), plutôt que hors du bloc de commutation environnant.

  • Tous les cas ne doivent pas nécessairement contenir next. Sinonnextapparaît, le flux de contrôle ne tombera pas dans les cas suivants.

Représentation schématique

Exemple

#!/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" }
}

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

number 100

La chute est généralement une mauvaise idée dans une instruction switch. Cependant, considérons maintenant un cas fall-through, nous allons utiliser lenext pour transférer le contrôle au prochain cas correspondant, qui est une liste dans ce cas -

#!/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" }
}

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

number 100
number in list