As you say, programming like this probably causes some maintenance problems. Having said that, you should look at UNIVERSAL::isa()
Your test of $invokant also won't work if called by a class inheriting from MyClass:
package MyClass; sub new { print shift; } package MySubClass; @MySubClass::ISA = qw(MyClass); package main my $test = new MySubClass; __DATA__ prints "MySubClass"
So having said that, I probably would write the constructor like this:
___ Simon Flack ($code or die)sub _new_or_old { my $invokant = shift; defined( $invokant ) or return undef; if( UNIVERSAL::isa($invokant, 'MyClass' ) { return $invokant; } else { my $self = {}; bless( $self, $invokant ); return $self; } }
In reply to Re: Multiple "constructors", possible to call several.
by $code or die
in thread Multiple "constructors", possible to call several.
by Dog and Pony
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |