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 "; $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.