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: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |