MakeMe...Modules(3pm)
β¨ MakeMe...Modules(3pm) β¨
okay bestie, this is the Class::MakeMethods::Docs::RelatedModules page β aka Survey of Class Builders β from User Contributed Perl Documentation. Itβs giving βlet me compare all the CPAN class-builder girlies so you donβt have to,β and honestly? iconic. π
π NAME π
Class::MakeMethods::Docs::RelatedModules β Survey of Class Builders
πΈ SYNOPSIS πΈ
http://search.cpan.org/search?mode=module&query=Class
π¦ DESCRIPTION π¦
There are a variety of modules on CPAN dedicated to the purpose of generating common constructor and accessor methods. Below, I survey several of these, summarizing some basic features and technical approaches, and comparing them to Class::MakeMethods and other modules.
π Caution π
Please note that these comments are for basic comparison purposes only and may be incorrect or out of date. Please consult the documentation from a current version of each module for more specific details. Corrections and clarifications would by welcomed by the author at the email address below.
π Points of Comparison π
In general, I compared the following characteristics:
- Distribution β Is it included with Perl, or on CPAN? Is it being actively maintained?
- Usage β How do you go about declaring your classβs methods?
- Mechanism β How are they generated and delivered?
- Instance type β Are the objects of your class blessed hashes, or something else?
- Core Methods β Does the module provide a constructor and basic accessors? Are there specialized methods for hash-ref, array-ref, and object-ref accessors?
- Extensible β Can you subclass the package to create new types of methods, or is there some other way to extend it?
- Other Methods β Other types of methods provided.
- Emulator β Does
Class::MakeMethodsprovide a drop-in replacement for this module? - Comments β Other characteristics or features of note.
π RELATED MODULES π
π accessors
Distribution
CPAN. Uploaded Sep 2003.
Comments
I have not yet reviewed this module in detail.
Example
package MyObject;
use accessors qw( foo bar baz );
π Attribute::Property
Distribution
CPAN.
Comments
I have not yet reviewed this module in detail.
π Class::Accessor
Distribution
CPAN. Last update 4/01.
Usage
Inherit and call function with declaration arguments
Mechanism
Generates and installs closures
Instance Type
Hash.
Subclasses Cleanly
Cleanly.
Standard Methods
Scalar accessors.
Extensible
Yes.
Comments
Accessor methods call overwritable self-<get(key) and self-<set(key, value) methods.
Also includes Class::Accessor::Fast, which creates direct hash keys accessors without calling get and set methods.
Emulator
Yes, but only for the Fast variation; see Class::MakeMethods::Emulator::AccessorFast.
Example
package MyObject;
@ISA = qw(Class::Accessor);
MyObject->mk_accessors(qw( simple ordered mapping obj_ref ));
π Class::Class
Distribution
CPAN. Last update 1/00.
Usage
Inherit and fill %MEMBERS hash; methods created when first object is created
Mechanism
Generates and installs closures
Instance Type
Hash.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and various accessors.
Extensible
No.
Example
Usage is similar to Class::Struct:
package MyObject;
use Class::Class;
@ISA = qw(Class::Class);
%MEMBERS = (
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
);
Other Method Types
Provides a polymorph() method that is similar to Class::Method's ClassName:class_name -require.
πΈ Class::Constructor
Distribution
CPAN. Last update 11/01.
Usage
Inherit and call function with declaration arguments
Mechanism
Generates and installs closures
Instance Type
Hash.
Subclasses Cleanly
Cleanly.
Standard Methods
Hash constructor, with bells.
Extensible
No.
Emulator
No, but possible.
Example
package MyObject;
@ISA = qw(Class::Constructor);
MyObject->mk_constructor( Name => 'new' );
π§ Class::Classgen
Distribution
CPAN. Last update 12/00.
Usage
Pre-processor run against declaration files.
Mechanism
Assembles and saves code file
Instance Type
Hash.
Subclasses Cleanly
Yes. (I think.)
Standard Methods
Constructor and various accessors.
Extensible
No. (I think.)
Example
header:
package MyObject;
variables:
$simple
@ordered
%mapping
$obj_ref
π Class::Contract
Distribution
CPAN. Last update 5/01.
Usage
Call function with declaration arguments
Mechanism
Generates and installs closures
Instance Type
Scalar reference with external data storage.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and various accessors.
Extensible
Yes. (I think.)
Comments
Supports pre- and post-conditions, class invariants, and other software engineering goodies.
Example
package MyObject;
use Class::Contract;
contract {
ctor 'new';
attr 'simple' => SCALAR;
attr 'ordered' => ARRAY;
attr 'mapping' => HASH;
attr 'obj_ref' => 'FooObject';
}
π¦ Class::Data::Inheritable
Distribution
CPAN. Last update 4/00.
Usage
Inherit and call function with declaration arguments
Mechanism
Generates and installs closures
Instance Type
Class data, with inheritance.
Subclasses Cleanly
Yes, specifically.
Standard Methods
Scalar accessors.
Extensible
No.
Example
Usage is similar to Class::Accessor:
package MyObject;
@ISA = qw(Class::Data::Inheritable);
MyObject->mk_classdata(qw( simple ordered mapping obj_ref ));
Emulator
Yes, Class::MakeMethods::Emulator::Inheritable, passes original test suite.
π Class::Delegate
Distribution
CPAN. Uploaded 12/0.
Comments
I have not yet reviewed this module in detail.
β Class::Delegation
Distribution
CPAN. Uploaded 12/01.
Comments
I have not yet reviewed this module in detail.
π₯ Class::Generate
Distribution
CPAN. Last update 11/00.
Usage
Call function with declaration arguments
Mechanism
Assembles and evals code string, or saves code file.
Instance Type
Hash.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and accessors (scalar, array, hash, object, object array, etc).
Extensible
Unknown.
Comments
Handles private/protected limitations, pre and post conditions, assertions, and more.
Example
Usage is similar to Class::Struct:
package MyObject;
use Class::Generate;
class MyObject => [
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
];
π Class::Hook
Distribution
CPAN. Uploaded 12/01.
Comments
I have not yet reviewed this module in detail.
π Class::Holon
Distribution
CPAN. Experimental/Alpha release 07/2001.
Instance Type
Hash, array, or flyweight-index.
Subclasses Cleanly
No. (I think.)
Standard Methods
Constructor and scalar accessors; flywieght objects also get scalar mutator methods.
Extensible
No. (I think.)
Comments
I'm not sure I understand the intent of this module; perhaps future versions will make this clearer....
π Class::MethodMaker
Distribution
CPAN. Last update 1/01.
Usage
Import, or call function, with declaration arguments
Mechanism
Generates and installs closures
Instance Type
Hash, Static.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and various accessors.
Extensible
Yes.
Example
Usage is similar to Class::MakeMethods:
package MyObject;
use Class::MethodMaker (
new => 'new',
get_set => 'simple',
list => 'ordered',
hash => 'mapping',
object => [ 'FooObject' => 'obj_ref' ],
);
Emulator
Yes, Class::MakeMethods::Emulator::MethodMaker, passes original test suite.
π Class::MakeMethods
Distribution
CPAN.
Usage
Import, or call function, with declaration arguments; or if desired, make methods on-demand with Autoload, or declare subroutines with a special Attribute.
Mechanism
Generates and installs closures
Instance Type
Hash, Array, Scalar, Static, Class data, others.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and various accessors.
Extensible
Yes.
Example
Usage is similar to Class::MethodMaker:
package MyObject;
use Class::MakeMethods::Hash (
new => 'new',
scalar => 'simple',
array => 'ordered',
hash => 'mapping',
object => [ 'obj_ref', { class=>'FooObject' } ],
);
πΈ Class::Maker
Distribution
CPAN. Last update 7/02.
Usage
Call function with declaration arguments.
Mechanism
Generates and installs closures (I think).
Instance Type
Hash (I think).
Subclasses Cleanly
Unknown.
Standard Methods
Constructor and various scalar and reference accessors.
Extensible
Unknown.
Comments
I haven't yet reviewed this module closely.
π¦ Class::SelfMethods
Distribution
CPAN. Last update 2/00.
Usage
Inherit; methods created via AUTOLOAD
Mechanism
Generates and installs closures (I think)
Instance Type
Hash.
Subclasses Cleanly
Yes.
Standard Methods
Constructor and scalar/code accessors (see Comments).
Extensible
No.
Comments
Individual objects may be assigned a subroutine that will be called as a method on subsequent accesses. If an instance does not have a value for a given accessor, looks for a method defined with a leading underscore.
Class::Struct π
- Distribution β Included in the standard Perl distribution. Replaces
Class::Template. - Usage β Call function with declaration arguments.
- Mechanism β Assembles and evals code string.
- Instance Type β Hash or Array.
- Subclasses Cleanly β No.
- Standard Methods β Constructor and various accessors.
- Extensible β No.
- Emulator β Yes,
Class::MakeMethods::Emulator::Struct.
Example time, bestie β this is literally the whole vibe:
package MyObject;
use Class::Struct;
struct(
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
);
Class::StructTemplate π¦
- Distribution β CPAN. Last update
12/00. - Usage β Unknown.
- Mechanism β Unknown.
No documentation available. π We stay guessing, respectfully.
Class::Template π
- Distribution β CPAN. Out of date.
- Usage β Call function with declaration arguments (I think).
- Mechanism β Assembles and evals code string (I think).
- Instance Type β Hash.
- Subclasses Cleanly β Yes. (I think.)
- Standard Methods β Constructor and various accessors.
- Extensible β No. (I think.)
Example β Usage is similar to Class::Struct:
package MyObject;
use Class::Template;
members MyObject {
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
};
Class::Virtual β¨
This one generates methods that fail with a message indicating that they were not implemented by the subclass. (Cf. 'Template::Universal:croak -abstract'.)
It also provides a list of abstract methods that have not been implemented by a subclass. Very βyou forgot to implement meβ energy.
- Distribution β CPAN. Last update
3/01. - Extensible β Unknown.
- Mechanism β Uses
Class::Data::Inheritableand installs additional closures.
CodeGen::PerlBean πΈ
- Distribution β CPAN.
- Usage β Call function with declaration arguments.
- Mechanism β Generates and writes source code to a file.
- Instance Type β Hash (I think).
- Subclasses Cleanly β Unknown.
- Standard Methods β Constructor and various scalar and reference accessors.
- Extensible β Unknown.
- Comments β I haven't yet reviewed this module closely. π
HTML::Mason::MethodMaker π
- Distribution β CPAN.
- Usage β Package import with declaration arguments.
- Mechanism β Generates and installs closures.
- Instance Type β Hash.
- Standard Methods β Scalar accessors.
- Extensible β No.
Example β short, sweet, and iconic:
use HTML::Mason::MethodMaker (
read_write => [ qw( simple ordered mapping obj_ref ) ]
);
π TO DO π
The following modules are relevant but have not yet been cataloged above. Not me leaving them in the queue, but okay β theyβre noted:
Attribute::PropertyClass::Accessor::ChainedClass::Accessor::LvalueClass::Accessor::RefClass::AutoClassClass::BuilderClass::MemberClass::Trigger
π SEE ALSO π
See Class::MakeMethods for general information about this distribution. Thatβs the main character right there.
π CREDITS AND COPYRIGHT π
β¨ Developed By β¨
- M. Simon Cavalletto,
simonm@cavalletto.org - Evolution Softworks,
www.evoscript.org
π Copyright π
Copyright 2002 Matthew Simon Cavalletto.
Portions copyright 2000, 2001 Evolution Online Systems, Inc.
πͺͺ License πͺͺ
You may use, modify, and distribute this document under the same terms as Perl. Slay, legally.
Footer vibe check, bestie: source/version is perl v5.36.0, dated 2022-10-13. Thatβs a wrap β go forth and make those methods cute. π
π«Ά
π¦ where this page comes from
- ubuntu noble: libclass-makemethods-perl 1.01-7 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libclass-makemethods-perl 1.01-7 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libclass-makemethods-perl 1.01-7 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms