map is a looping construct, which works a lot like grep, except that map returns all elements, while grep only returns those evaluating to true in the given expression/code block. map is typically used to derive new elements from the given list, while grep is typically used to filter the list according to some criterion. map is also similar to foreach.
For instance, these are equivalent:
my @x;
foreach ( 0..9 ) { push @x, $_ };
my @x;
@x = grep 1, 0..9;
my @x;
@x = map $_, 0..9;
When map is used for good, it makes the code easier to read, and the dataflow easier to follow. But it can be abused, just like anything else useful.
-QM
--
Quantum Mechanics: The dreams stuff is made of
| [reply] [d/l] [select] |
I'm glad it works for you, but I should point out a few flaws in the solution I proposed:
- The "and" will prevent the value from being returned, if no substitution occurs.
- My replacing of "grep" with an "if" within the map causes blank values to be pushed when the /\S/ doesn't match
I should have just fixed the problem I saw, instead of trying to be clever.
push @array,
map {
$_->[1] =~ s/[\s?,]//g;
$_->[1];
}
grep {
$_->[0] =~ /\S/
} @rows;
The PerlMonk tr/// Advocate
| [reply] [d/l] |