Over the past few years, I've been carrying around (and/or re-writing from
scratch) a very simple object base class that I like to use in my work. I
never though to upload it to CPAN since I figured there must already be
something similar. Well, I've started looking and I can't find anything
that fits the bill on CPAN, so I'm considering uploading it.
My base class does almost nothing. It requires hash-based objects; it
provides very loose conventions for cascading initialization; and it
auto-creates simple scalar accessors via AUTOLOAD. There's also a (still
experimental) "pre-compile" option for use with mod_perl, etc.
The module has historically been named XXX::Object, where XXX is some
identifier unique to the environment I'm working in at the time: my initials
for personal use, a company name for business use, etc.
Here's a usage example:
package Person;
use XXX::Object;
our @ISA = qw(XXX::Object);
sub init # Override init
{
my($self) = shift;
# Add attributes
$self->{'name'} = undef;
$self->{'age'} = undef;
# Call base class init()
$self->SUPER::init(@_);
}
...
$person = Person->new(name => 'John');
$person->age(26);
print $person->name, " is ", $person->age, " years old.";
Like I said, it's dead simple. The only wrinkle is that the constructor:
$person = Person->new(name => 'John');
actually calls $self->name('John') rather than setting the hash key
directly. (To better encapsulate you, my dear... :)
I find this module useful because it is so light-weight. It's easy to
expand upon to further constrain things, and stuff like Tie::SecureHash is
always out there if I need it. But I've built very large class hierarchies
on my XXX::Object base class with great success. I'd like to share my tiny
little module with the world (before Perl 6 arrives and makes it unnecessary
;)
But now we come to naming. What should I call this thing if/when its placed
in CPAN? It looks like Class::* is the hierarchy of choice, but I much
prefer the expressiveness of:
@ISA = qw(XXX::Object);
"This is-a XXX::Object." "Is $foo a 'XXX::Object'?" And so on.
Substituting "Class" seems odd to me. But whatever, the problem of what
goes either before or after "Object" or "Class" remains.
All I've got so far are:
Object::Lite
Object::Simple
Class::Lite
Class::Simple
Class::Object::Lite
Er...or something. And, of course, you could just tell me not to upload it
at all because there's already something similar or identical on CPAN that I
haven't found :)
So, ideas? Suggestions? Thanks.
-John