I am having a conceptual problem with this question. Or, perhaps more significantly, I suspect this question may itself reflect a conceptual problem.
As I understand it, map is a functional programming construct. One of the tenets of functional programming (at least in "pure" form) is that actions do not have side-effects. Because of this, functional constructs are inherently parallelizable.
In other words:
- for/foreach runs through a list of items sequentially, allowing each one to affect the environment as it goes. This includes alterations to the loop control, such as terminating the loop early with last.
- map operates on all elements of the list independently and these operations should not affect the outside world. It is not a loop per se and this independence, if maintained, potentially allows for such things as handling elements concurrently in different contexts (multithreading/multiple CPUs/distributed systems/etc.) or optimizing the process by handling elements out-of-order. Allowing one element to abort or otherwise affect the handling of other elements violates this independence.
Based on this understanding,
map is the wrong tool for this job, even if the implementation artifacts of current Perl implementations of
map (i.e., behaving as if it's a loop) allow it to be coerced into doing it successfully.
Or have I misunderstood something here?