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, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access