Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: question regarding "Tie" in Perl

by BrowserUk (Pope)
on Nov 04, 2013 at 20:03 UTC ( #1061194=note: print w/ replies, xml ) Need Help??


in reply to question regarding "Tie" in Perl

That's a horribly inefficient way of creating & using constants.


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.


Comment on Re: question regarding "Tie" in Perl
Re^2: question regarding "Tie" in Perl
by lightoverhead (Monk) on Nov 04, 2013 at 20:20 UTC

    This is just for question regarding "Tie" behavior.

    However, this implementation has advantage of using the tied variable as constant in a string which can be interpolated.

    "use constant AVO => 6" can not interpolate it in a string.

      However, this implementation has advantage of using the tied variable as constant in a string which can be interpolated.

      And the benefit of interpolating a compile-time constant into a string at runtime is?

      use constant AVO => 6; ... print "The constant is " . AVO . "\n";

      Or

      printf "The constant is %d\n", AVO; print "The constant is ${ \AVO }";;

      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.

        BrowserUk

        Thank you man. You proved your point.

        I like the cute "${\AVO}".

      That's no excuse for implementing a constant using tie.

      use strict; use warnings; Internals::SvREADONLY(my $answer = 42, 1); print "This interpolates: $answer\n"; $answer++; # dies
      use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

        Cool'n'all as that is, by deferring the construction of constants to runtime, you disavail yourself of various compile-time optimisations that Perl has.

        Even the very act of interpolating a read-only variable is an active pessimisation, as whilst perl will enforce the read-onliness, Perl does not (cannot) know that it need not re-interpolate the variable every time it is used:

        use constant CONSTANT => 10;; Internals::SvREADONLY( my $READONLY = 10, 1);; [Type of arg 1 to Internals::SvREADONLY must be one of [$%@] (not scal +ar assignment) at (eval 11) line 1, near "1)" $READONLY = 10; Internals::SvREADONLY( $READONLY, 1);; ++$READONLY;; [Modification of a read-only value attempted at (eval 13) line 1, <STD +IN> line 6. cmpthese -1,{ a=>q[ for(1..1000){ my $string = "the constant is " . CONSTANT . " +\n" } ], b=>q[ for(1..1000){ my $string = "the readonly is $READONLY\n"; } + ], };; Rate b a b 3893/s -- -46% a 7236/s 86% --

        A small a difference as that may be; it is all those avoidable small bits that add up.


        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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1061194]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2014-08-20 06:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (105 votes), past polls