my $_global;
sub _self_or_create
{
my $self = shift;
return $self if (ref $self and $self->isa(__PACKAGE__))
$_global ||= __PACKAGE__->_new();
return $_global; # assume $self eq __PACKAGE__ or something derived from it?
}
####
sub some_method
{
my $self = _self_or_create(shift);
# ...
}
####
{
my $obj = Vendor::Library->new(...);
# code here
}
{
my $obj = Vendor::Library->new(...);
# different code here (I presume)
}