The if
statement is straightforward.
Because BLOCK
s are always bounded by
braces, there is never any ambiguity regarding which particular
if
an else
or
elsif
goes with. In any given sequence of
if
/elsif
/else
BLOCK
s, only the first one whose condition
evaluates to true is executed. If none of them is true, then the
else
BLOCK
, if there is
one, is executed. It's usually a good idea to put an
else
at the end of a chain of
elsif
s to guard against a missed case.
If you use unless
in place of
if
, the sense of its test is reversed. That
is:
unless ($x == 1) …
is equivalent to:
if ($x != 1) …
or even to the unsightly:
if (!($x == 1)) …
The scope of a variable declared in the controlling condition
extends from its declaration through the rest of that conditional
only, including any elsif
s and the final
else
clause if present, but not beyond:
if ((my $color = <STDIN>) =~ /red/i) { $value = 0xff0000; } elsif ($color =~ /green/i) { $value = 0x00ff00; } elsif ($color =~ /blue/i) { $value = 0x0000ff; } else { warn "unknown RGB component `$color', using black instead\n"; $value = 0x000000; }
After the else
, the $color
variable is no longer in scope. If you want the scope to extend
further, declare the variable beforehand.
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.