in reply to Re: Calling module function from within a blessed module
in thread Calling module function from within a blessed module

Never, ever, ever do this. The one argument version of bless really should issue a warning.

Actually, in real code I do not generally use the one argument version. I created that as a minimal example to support the question.

Having said that, I don't know why I avoid the single argument version. It is because I have copied other code that works and looks like the author knows what they are doing which is not exactly the most rigorous methodology for learning...

  • Comment on Re^2: Calling module function from within a blessed module

Replies are listed 'Best First'.
Re^3: Calling module function from within a blessed module
by dsheroh (Monsignor) on Jan 03, 2021 at 12:45 UTC
    The reason why you generally shouldn't use the one-argument version of bless is because it makes subclassing more difficult.

    If you have two classes, Parent and Child, and Parent uses bless {}, $_[0];, then Child can simply inherit Parent's new (or other constructor) and Child->new() will Just WorkTM.

    If Parent uses one-argument bless, then it will always create a Parent object, and Child will have to override the constructor (either writing a completely new constructor, or calling Parent's constructor and re-blessing the result before returning it).