http://www.perlmonks.org?node_id=999826


in reply to Re: Anonymous Hash in Constructor
in thread Anonymous Hash in Constructor

I somehow find it instructive to do this…

{ package SomeClass; sub new1 { bless {} } sub new2 { bless \%hash } sub does_it_work { print "Yes, it works\n" } } $obj1 = SomeClass->new1; $obj1->does_it_work; $obj2 = SomeClass->new2; $obj2->does_it_work;

…to your fine example. Removing all pragmas is intentional. This isn't quality code. It's simple code to make the rudiments of something clearer—to me, at least. I learned something by this reduction.

Replies are listed 'Best First'.
Re^3: Anonymous Hash in Constructor
by tobyink (Canon) on Oct 19, 2012 at 05:50 UTC

    Ah, but using strict and warnings demonstrates that nothing in the example is considered bizarro stuff that Perl will complain about.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
      Ah, but using strict and warnings demonstrates that nothing in the example is considered bizarro stuff that Perl will complain about.

      Yes, indeed. Adding even more stuff to the example could introduce many new invaluable lessons. A complete, well-written Perl application could serve as a primer in good object-oriented programming. No doubt. But my point here was simply that I learned a little something by going a bit reduction-crazy. Noise reduction as pedagogical aid.

      Disregarding the original topic of this thread entirely, I learned more still by playing with this…

      { package Class; sub new { bless {} } # sub new { bless [] } # sub new { bless \$scalar } # sub new { bless \&sub } sub Method { print "This is a method happening.\n" } } $object = Class->new; $object->Method;

        Then this will blow your mind...

        sub x { print {+shift} "this is a method happening\n" } bless \*STDOUT, main::; (\*STDOUT)->x;
        perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'