Perl switch Statement
A switch statement allows a variable to be tested for equality against a list of values. Each value is called a case, and the variable being switched on is checked for each switch case.A switch case implementation is dependent on Switch module and Switch module has been implemented using Filter::Util::Call and Text::Balanced and requires both these modules to be installed.
Syntax:
The synopsis for a switch statement in Perl programming language is as follows: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" }
}
The following rules apply to a switch statement:
·
The switch statement takes a single
scalar argument of any type, specified in parentheses.
·
The value is followed by a block which may
contain one or more case statement followed by a block of Perl statement(s).
·
A case statement takes a single scalar argument
and selects the appropriate type of matching between the case argument and the
current switch value.
·
If the match is successful, the mandatory block
associated with the case statement is executed.
·
A switch statement can have an optional else
case, which must appear at the end of the switch. The default case can be used
for performing a task when none of the cases is matched.
·
If a case block executes an untargeted next,
control is immediately transferred to the statement after the case statement
(i.e. usually another case), rather than out of the surrounding switch block.
·
Not every case needs to contain a next.
If no next appears, the flow of control will not fall through
subsequent cases.
Example:
#!/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" }
}
When the above code is executed, it produces following result:number 100
Fall-though is usually a bad idea in a switch statement. However, now
consider a fall-through case , we will use next to transfer the control
to the next matching case which is a list in this case:#!/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" }
}
When the above code is executed, it produces following result:number 100
number in list