Expression Modifiers
For 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 the same result as if we had used this code, except that we saved some typing by leaving out the parentheses and curly braces:[235]
if ($n < 0) {
print "$n is a negative number.\n";
}Perl folks generally like to avoid typing. The shorter form reads like in English: print this message if $n is less than zero.
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 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 work as you would expect (we hope). 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 language: call the &greet subroutine for each @person in the list. ...
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