in reply to simple swap...

I don't think it's a 5.6 thing: I ran eduardo's code on ActiveState 5.6 with these results:
Benchmark: running not traditional, traditional, each for at least 10 +CPU seconds... not traditional: 11 wallclock secs (10.68 usr + 0.02 sys = 10.70 CPU) + @ 364259.16/s (n=3899030) traditional: 11 wallclock secs (10.85 usr + 0.00 sys = 10.85 CPU) @ 4 +74001.38/s (n=5141493)
Judging by the difference, the compiler doesn't seem optimize that kind of switch.