Almost. Map returns an array, which a foreach doesn't AFAIK. So you can get some useful behaviour with:
join "\n", map{$_->someFunction()} @a;
| [reply] [Watch: Dir/Any] [d/l] |
Maybe it's just that I was a math major, or got too close to those whacky Haskell nuts, but map has always seemed a very natural metaphor for me. (It's the natural extension of a function on a space A to the space An)
However, this (map is natural instead of foreach) is only true when the expression inside the map isn't itself accumulating side-effects; e.g. the following useage of map doesn't seem natural:
my $i=0;
map {$keywordhash{$_}=(++$i);} @keywords;
However, this useage seems quite natural:
%keywordhash = map {$_ => 1} @keywords;
I guess you could also distinguish these two cases by noting that one calls map in void context whereas the other does not; while that's true, I think I'd still prefer
do {$keywordhash{$_}=(++$i);} for @keywords;
over:
%keywordhash = map { $_ => ++$i } @keywords;
Even though I like map, because I'm not completely comfortable with the idea of depending on a certain execution order for map, even though I know it has one. When I'm thinking in a linear, this-gets-executed-then-this mode, map rarely makes sense. map does however make sense as a higher-order function, and when I'm thinking like that it's quite natural.
(Of course, all style niceties get completely discarded inside JAPHs)
--
@/=map{[/./g]}qw/.h_nJ Xapou cets krht ele_ r_ra/;
map{y/X_/\n /;print}map{pop@$_}@/for@/
| [reply] [Watch: Dir/Any] [d/l] [select] |