in reply to Lies, Damn Lies and Benchmarks

If you run your code under warnings, Perl complains about Odd number of elements in hash assignment. Nothing unexpected. But if you benchmark just one of the versions at a time, there's an interesting nugget to be found.

The list bench is predictable and boring. The screen fills with warnings emitted at a constant rate.

But the shift benchmark exhibits a rather inexplicable pattern. The fact that the warnings eventually stop is easy to understand: modifying the caller's @_ is a sideeffect that persists across iterations. What is really strange is that the warnings are emitted at progressively slower rate.

Why? I don't know. I clawed around in the bowels of Benchmark.pm briefly but didn't find it very pleasant to read, so I gave up. Maybe someone more motivated than me wants to pick up this riddle.

Makeshifts last the longest.