in reply to Re: Leaving a constructor midway?
in thread OO: Leaving a constructor midway?

Definition of Constructor:

The constructor is a member function of a class. It is invoked every time an object is created. ...

Surely none of the examples I gave that you call "constructors" are invoked if a new object is created. They are called, and just happen to return an object (which may, or may not, be constructed using 'bless'). Consider the following function:

sub foo { rand (2) < 1 ? 0 : bless [] => "foo" }
Would that be a Schr\"odinger cat constructor?
By that definition, your Gonbagger methods one(), two(), and three() are all constructors, as is the lioger1 method from the second example. Gonbagger::four() is not a constructor because it doesn't construct anything. Neither is the lioger2() method.
But the client code doesn't know what's going on under the hood, and to quote you:
The fact that, under the hood, it calls bless is completely irrelevant to the client code.

package Foo; sub new { bless [], $_[0] } sub confuse { bless $_[0], 'ARRAY' }
Surely, you're not going to tell me that confuse() is using bless as a constructor?!?
Of course it is. It's making a new instance of the class "ARRAY". You might quibble that $_ [0] might already be an instance of the class 'ARRAY' and therefore it's not constructing a new object, but that's as useful as arguing that $x = 17; isn't an assignment if the value of $x happens to be 17.

Abigail