The given Statement
In the previous example, we kept talking about $color. Linguists call this a
topic. In v5.10 or later, an alternative to the
if structure is available, the
given statement, which functions
linguistically as a topicalizer. It
works by setting $_ to the current
topic. You can then use when
statements to examine the topic for various values or patterns.
This feature is enabled when you use a version of Perl that is at least
v5.10:
use v5.12; # at least v5.12, load default features
or when you specifically request the “switch”
feature:
use feature "switch"; # just get the switch feature
Either of those adds several new keywords to the Perl language:
given, when, break, continue, and default. Here is one way to recode the
previous example using the new feature:
use v5.10;
my $value;
given (<STDIN>) {
when (/red/i) { $value = 0xFF0000 }
when (/green/i) { $value = 0x00FF00 }
when (/blue/i) { $value = 0x0000FF; }
default {
chomp;
warn "unknown RGB component '$_', using black instead\n";
$value = 0x000000;
}
}In fact, in v5.10 you had to write it that
way since given couldn’t return
values. In v5.14 or later, you can return values, and with the
statement modifier form of when,
you may even write it this way:
use v5.14;
my $value = do {
given (<STDIN>) {
0xFF0000 when /red/i;
0x00FF00 when /green/i;
0x0000FF when /blue/i;
chomp;
warn "unknown RGB component '$_', using black instead\n";
0x000000;
}
};The arguments to given and
when are in scalar context; given binds its argument ...
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