in reply to Re^4: What is the most efficient way to see if a hash is empty?
in thread What is the most efficient way to see if a hash is empty?
The trouble is, the comma operator does not prevent the "Useless use of ... in a void context:
C:\test>perl -wle"substr( $i, 0, 1 ), ++$i for 1 .. 100" Useless use of substr in void context at -e line 1. Use of uninitialized value $i in substr at -e line 1.
And I'm never sure whether that means it will always be optimised away as with:
C:\test>perl -MO=Deparse -wle"$x = 1,2,3" Useless use of a constant in void context at -e line 1. Useless use of a constant in void context at -e line 1. Name "main::x" used only once: possible typo at -e line 1. BEGIN { $^W = 1; } BEGIN { $/ = "\n"; $\ = "\n"; } $x = 1, '???', '???'; -e syntax OK
Or not? And with Benchmark not enabling warnings when it compiles stringified test code, it is very easy to find yourself benchmarking empty statements and drawing conclusions on that basis.
And as you've demonstrated with your version of moritz benchmark, when attempting to benchmark micro-optimisations like the OPs question, the overhead of calling two levels of sub (benchmark wraps the user supplied code in it's own wrapper internally), can have a significant effect upon the perceived results.
|
|---|