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

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.

Replies are listed 'Best First'.
Re^5: Avoiding Globals with OO Perl
by BrowserUk (Patriarch) on Oct 21, 2011 at 00:06 UTC

    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.

        Both tests set and reference the variable 1000 times each. Yep. Would you write code like that in a real program?

        Set and reference the value of scalars. Yes, I do that in every program I write. And so do you!

        silly busywork

        Okay, I can see you're wearing your dOOgma head today so there'll be no placating you.

        But, for those readers concerned with actually understanding what is going on in the benchmark, the loop within the subs is common to both and is therefore irrelevant to the relative performance -- the percentage figures -- produced by the benchmark.

        The benchmark is sound.

        The relevance of the benchmark depends upon real-world usage, but since the OP hasn't posted any real-world usage -- and it would be specific to his application even if he had -- it is up to each reader to decide upon the importance of performance to their knowledge of their applications.

        Your attempts at blanket derisory dismissal serve no one.


        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.