my @data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
my @formatted_data;
foreach (@data) {
push @formatted_data, &big_money($_);
}
That looks similar in form to the example code used at the beginning
of the section on grep, doesn't it? So it
may not surprise you that the replacement code resembles the first
grep example:
my @data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
my @formatted_data = map { &big_money($_) } @data;
Any grep or map statement could
be rewritten as a foreach loop pushing items onto
a temporary array. But the shorter way is typically more efficient
and more convenient. Since the result of map or
grep is a list, it can be passed directly to
another function. Here we can print that list of formatted
"money numbers" as an indented list under a heading:
print "The money numbers are:\n",
map { sprintf("%25s\n", $_) } @formatted_data;
Of course, we could have done that processing all at once, without
even the temporary array @formatted_data:
my @data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
print "The money numbers are:\n",
map { sprintf("%25s\n", &big_money($_) ) } @data;
As we saw with grep, there's also a simpler
syntax for map. If all you need for the selector
is a simple expression (rather than a whole block), you can just use
that expression, followed by a comma, in place of the block:
print "Some powers of two are:\n",
map "\t" . ( 2 ** $_ ) . "\n", 0..15;
 |  |  |
17.2. Picking Items from a List with grep |  | 17.4. Unquoted Hash Keys |