OOP-Perlish-Class So, why do we want yet another base-class implementation on CPAN? Well, OOP and perl5 are not necessarily 100% sympatric, and to that end, many developers have contributed OOP frameworks, usually modeling other, langauges like C++, smalltalk, etc. However, this framework was designed with a slightly different goal in mind; To allow _perl5_ OOP without code duplication. Said another way, I wanted to let perl5 remain perl5, while still providing all the benefits of OOP best practices. The perlboot and perltoot man pages that ship with perl describe one particular kind of object, blessed hash references. These have often been forsaken in lieu of inside-out-objects, and other lexical trickery. These alternative object types are usually chosen in attempts to "protect" users of your class' from their internals. This level of encapsulation is great, if the language both a) allows it, and b) benefits from it. However, perl5 isn't such a langauge. There is no way to really protect instance data entirely, but more importantly, no particularly compelling reason to do so. You can encapsulate "within reason", but not at the expense of maintainability, legibility, runtime-efficiency, etc. This OOP framework encapsulates accessor data in inheritable, validatable, immutable, and safe ways, but makes no attempts to really "hide" the internals, it simply presumes that if you bypass safeties that you know what you are doing, and makes it difficult to do so on accident. More importantly, using this framework, your code will still look like perl5 (perhaps slightly prettier in some ways, but still 100% recognizable and understandable to any perl programmer maintaining your class) Here's what this module currently provides for: Multiple-Inheritance Mix-ins Meta-programming (class introspection; quite useful with mix-ins) Generational Inheritance (complex hiarchies of inheritance) method overriding/overloading Accessor validation Accessor cascading via validator Singletons Multitons (aka: multi-singletons, keyed singletons, named singletons, singleton-maps) Polymorphism (aka duck-typing for ruby folks) Abstract Classes (aka interfaces, protocols, traits, flavors, roles, class-prototypes, etc) INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc OOP::Perlish::Class You can also look for information at: RT, CPAN's request tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=OOP-Perlish-Class AnnoCPAN, Annotated CPAN documentation http://annocpan.org/dist/OOP-Perlish-Class CPAN Ratings http://cpanratings.perl.org/d/OOP-Perlish-Class Search CPAN http://search.cpan.org/dist/OOP-Perlish-Class/ COPYRIGHT AND LICENCE Copyright (C) 2009 Jamie Beverly This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.