in reply to Re^2: Avoiding Globals with OO Perl
in thread Avoiding Globals with OO Perl

There is no invariant in the loop.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^4: Avoiding Globals with OO Perl
by chromatic (Archbishop) on Oct 20, 2011 at 23:30 UTC

    I assumed you were trying to demonstrate something interesting about real code, not a made up example which exaggerates the effect of a perceived problem.


    Improve your skills with Modern Perl: the free book.

      Look again and re-assess. There is no exaggeration.

      Both tests set and reference the variable 1000 times each. The reason for including a loop inside the both benchmark subs is to amortise the cost of that subroutine call across the 1000 iterations of the code under test. Without it, the code would be benchmarking the calling of the benchmark sub, not the code under test.

      If the benchmark is not to your taste, then consider this. Setting and then referencing a single scalar value involves:

      • Using the object
        1. 4 hash lookups
        2. two subroutine calls
        3. two multi-element list assignments
        4. one conditional test.
        5. plus the cost of stacking parameters and returning the results.

        And finally one each of setting or reading the value of the actual scalar.

      • Using a variable
        • one each of setting or reading the value of the actual scalar
        • Errrrrr. That's all folks"

      All in all, it is quite remarkable that the pointless OO code is only 7 1/2 times slower.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        Both tests set and reference the variable 1000 times each.

        Yep. Would you write code like that in a real program?

        I haven't either, but thanks for doing that benchmark. If I ever need to micro-optimize pointless silly busywork for speed, I'll be sure to keep in mind that some useless loops are faster than others in this one example.


        Improve your skills with Modern Perl: the free book.