The problem is that Perl provides no way to guarantee that a given piece of code has no side effects.Indeed. And in Perl, this is very, very hard. How hard? Well, your own example fails the test. Even the map {length} @array may cause a side-effect.
Whoopsie. One of the elements of @arr changed, just by looking at it!use Devel::Peek; my @arr = ("foo", 3); Dump($arr[-1]); my @bogus = map {length} @arr; Dump($arr[-1]); __END__ SV = IV(0x8192bcc) at 0x8184234 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 3 SV = PVIV(0x8184888) at 0x8184234 REFCNT = 1 FLAGS = (IOK,POK,pIOK,pPOK) IV = 3 PV = 0x8189cf8 "3"\0 CUR = 1 LEN = 2
This is the same reason why threads in Perl take quite a lot of overhead, and that by default variables are copied (and not shared) between threads.
In reply to Re: RFC: Implicit Parallelization Pragma
by Anonymous Monk
in thread RFC: Implicit Parallelization Pragma
by hardburn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |