Expression Modifiers
In order to have a more compact notation, an expression may be followed by a
modifier that controls it. For example, the if modifier works in a way analogous to an
if block:
print "$n is a negative number.\n" if $n < 0;
That gives exactly the same result as if we had used this code, except that we saved some typing by leaving out the parentheses and curly braces:[*]
if ($n < 0) {
print "$n is a negative number.\n";
}As we’ve said, Perl folks generally like to avoid typing. And the
shorter form reads in English: print this message if $n is less than zero.
Notice that the conditional expression is still evaluated first, even though it’s written at the end. This is backward from the usual left-to-right ordering; in understanding Perl code, you’ll have to do as Perl’s internal compiler does, and read to the end of the statement before you can tell what it’s really doing.
There are other modifiers as well:
&error("Invalid input") unless &valid($input);
$i *= 2 until $i > $j;
print " ", ($n += 2) while $n < 10;
&greet($_) foreach @person;These all work just as (we hope) you would expect. That is, each
one could be rewritten in a similar way to rewriting the if-modifier example earlier. Here is
one:
while ($n < 10) {
print " ", ($n += 2);
}The expression in parentheses inside the print argument list is noteworthy because it
adds two to $n, storing the result
back into $n. Then it returns that
new value, which will be printed.
These shorter forms read almost like a natural ...