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

Re: Anonymous Hash in Constructor

by AnomalousMonk (Chancellor)
on Oct 18, 2012 at 19:54 UTC ( #999810=note: print w/replies, xml ) Need Help??

in reply to Anonymous Hash in Constructor

... we make use of anonymous hash, whats the reason, why do we do that ...

tobyink has already pointed out and demonstrated that is is quite possible to create a named hash and then bless and return a reference to the hash as the object reference. But why is this not commonly done? The name of the referenced hash (or any other named data structure that might be used) is lost as soon as the constructor subroutine ends, and there is no way to ever access object data again except by reference, so there seems to be no point. The only reason I can think of to create and reference a named hash (or whatever structure) is self-documentation: a hash named  %attributes pretty much says it all, but one can do the same for an anonymous reference.

Replies are listed 'Best First'.
Re^2: Anonymous Hash in Constructor
by sundialsvc4 (Abbot) on Oct 18, 2012 at 20:25 UTC

    Of course, a local-variable is “lost” too, as soon as the containing subroutine (the constructor ...) ends.   So in this case, it really is a matter of personal preference on the part of the author.   You’re going to create something, you might or might not twiddle with it, you’re going to bless it, and then you’re going to return it as the function-result.   Q.E.D.   As long as the meaning of the block of code which you use to do that is abundantly obvious, and effortlessly maintainable, “Feel Free.™”

      Indeed. The two sample constructors I provided are functionally identical. If the Perl compiler were smart enough, it could happily generate the same optree from each (but it currently does not).

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://999810]
[james28909]: cant seem to make it look in linux module path for
[james28909]: no matter how i prepare the paths. oh well. looks like ill just have to start wsl perl from scratch
[Corion]: james28909: You can get a list of all modules on your Windows Perl via the autobundle command in the cpan shell. But that likely lists many more modules than you actually want. I recommend a clear separation and installing modules on ...
[Corion]: ... both Perls separately. I use cpanfiles or Makefile.PL for that - listing all modules for an application there allows me to install them via cpanm . or cpan . automatically without any further interaction

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (7)
As of 2018-05-23 17:19 GMT
Find Nodes?
    Voting Booth?