The given Statement
The given-when control
structure allows you to run a block of code when the argument to
given satisfies a condition. It’s
Perl’s equivalent to C’s switch statement,
but as with most things Perly, it’s a bit more fancy, so it gets a
fancier name.
Here’s a bit of code that takes the first argument from the
command line, $ARGV[0], and goes
through the when conditions to see if
it can find Fred. Each when block reports a different way that it
found Fred, starting with the least
restrictive to the most:
use 5.010;
given( $ARGV[0] ) {
when( /fred/i ) { say 'Name has fred in it' }
when( /^Fred/ ) { say 'Name starts with Fred' }
when( 'Fred' ) { say 'Name is Fred' }
default { say "I don't see a Fred" }
}The given aliases its argument
to $_,[27] and each of the when
conditions tries an implicit smart match against $_. You could rewrite the previous example
with explicit smart matching to see exactly what’s happening:
use 5.010;
given( $ARGV[0] ) {
when( $_ ~~ /fred/i ) { say 'Name has fred in it' }
when( $_ ~~ /^Fred/ ) { say 'Name starts with Fred' }
when( $_ ~~ 'Fred' ) { say 'Name is Fred' }
default { say "I don't see a Fred" }
}If $_ does not satisfy any of
the when conditions, Perl executes
the default block. Here’s the output
from several trial runs:
$ perl5.10.0 switch.pl Fred Name has fred in it $ perl5.10.0 switch.pl Frederick Name has fred in it $ perl5.10.0 switch.pl Barney I don't see a Fred $ perl5.10.0 switch.pl Alfred Name has fred in it
“Big deal,” you say, ...