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


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

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'

Replies are listed 'Best First'.
Re^4: Anonymous Hash in Constructor
by Jim (Curate) on Oct 19, 2012 at 19:20 UTC
    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'

        Then will this blow yours?

        sub new { print {+shift} "This is a method happening.\n" } bless \*STDOUT; (\*STDOUT)->new;

        Probably not.

        (I'd have to have this explained to me to understand it.)