Instrução de switch Perl
UMA switchinstrução permite que uma variável seja testada quanto à igualdade em relação a uma lista de valores. Cada valor é chamado de caso, e a variável que está sendo ligada é verificada para cadaswitch case.
Uma implementação de switch case depende de Switch módulo e SwitchO módulo foi implementado usando Filter :: Util :: Call e Text :: Balanced e requer que ambos os módulos sejam instalados.
Sintaxe
A sinopse de um switch declaração na linguagem de programação Perl é a seguinte -
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" }
}
As seguintes regras se aplicam a um switch declaração -
o switch instrução leva um único argumento escalar de qualquer tipo, especificado entre parênteses.
O valor é seguido por um bloco, que pode conter uma ou mais instruções case seguidas por um bloco de instruções Perl.
Uma instrução case usa um único argumento escalar e seleciona o tipo apropriado de correspondência entre o argumento case e o valor de switch atual.
Se a correspondência for bem-sucedida, o bloco obrigatório associado à instrução case é executado.
UMA switch declaração pode ter um opcional elsecaso, que deve aparecer no final do switch. O caso padrão pode ser usado para executar uma tarefa quando nenhum dos casos é correspondido.
Se um bloco de caso executa um não direcionado next, o controle é imediatamente transferido para a instrução após a instrução case (ou seja, geralmente outro case), em vez de sair do bloco de switch circundante.
Nem todo caso precisa conter um next. Se nãonextaparecer, o fluxo de controle não cairá nos casos subsequentes.
Diagrama de fluxo
Exemplo
#!/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" }
}
Quando o código acima é executado, ele produz o seguinte resultado -
number 100
Fall-embora geralmente é uma má ideia em uma instrução switch. No entanto, agora considere um caso de falha, usaremos onext para transferir o controle para o próximo caso correspondente, que é uma lista neste 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" }
}
Quando o código acima é executado, ele produz o seguinte resultado -
number 100
number in list