Lebih
Why doesn't my Perl map return anything?
When I am running the following statement:
@filtered = map {s/ //g} @outdata;
it is returning an empty list instead of the filtered list that I expected. What I am trying to do is remove every occurrence of
from an array of string (which is an XML file).
Obviously, I am not understanding something. Can anyone tell me the correct way to do this might be, and why this isn't working for me as is?
5
7
Note that map is going to modify your source array as well. So you could either do:
and skip the @filtered variable altogether, or if you need to retain the originals,
Although, in that case, it might be more readable to use foreach:
Try this:
The problem is the s operator in perl modifies $ but actually returns the number of changes it made. So, the extra $ at the end causes perl to return the modified string for each element of @outdata.
Greg's answer has the problem that it will modify the original array as the $_ are passed aliased. You need:
To follow up on Tithonium's point, this will also do the trick:
The "local" ensures you're working on a copy, not the original.
In perl 5.14 you could use the /r regex modifier to make non-destructive substitution.
As a counterpoint to Greg's answer, you could misuse grep:
Don't do this.