This is the README file for Class::Generate, version 1.11. Class::Generate is a Perl5 module to simplify creating class hierarchies. It offers typed or untyped scalar, array, and hash members, required members, private members, methods (both instance and class), and other common features of object- oriented software development. Of course, you can implement all these things without a special module, but doing it via Class::Generate is much, much more concise. And futhermore, it's much less error prone: if you are using Perl's -w flag, Class::Generate will catch many class specification and usage errors. After unpacking this module, type the commands: % perl Makefile.PL PREFIX= % make install where is the root of your Perl library directory. The commands will install 2 files: -- Generate.pm, which is the file containing the Class::Generate module. -- Generate.pod, which contains the documentation, in POD format. It is sufficiently large that I decided to place it in a separate file. Copyright (c) 1999,2000,2007 Steven Wartik. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. CHANGES IN VERSION 1.01 Parameter passing from a subclass to its superclass constructor is greatly improved. Several bugs were detected and corrected. The algorithms are smarter. Superclasses not declared via class() or subclass() are handled better. In 1.00, class() and subclass() sometimes modified their parameters. They no longer do. Array members have a new accessor, last_, which is a convenient abbreviation for the oft-used $obj->($obj->_size). Each class now has two methods that operate on instances: copy(), to copy an object instance, and equals(), to test the equality of two instances. New options: -- "class_var", which lets you choose an identifer other than "$class" as the class variable within a class method. -- "instance_var", which lets you choose an identifier other than "$self" as the instance variable within an object method. -- "check_code", which lets you control whether user-defined code is checked for correctness. -- "check_default", which does the same thing for default values of members. Some bug fixes: -- A bug in checking for duplicate member/method names has been corrected. -- A bug wherein class variables with default values were not always being properly declared has been corrected. -- List members were not checking for attempts to set read-only members. They do now. -- The error message emitted regarding an incorrect number of parameters reported the wrong number. It now reports the right number. -- Code checking in "post" code did not have the context of "pre" code. It now does. -- A member's "pre" code needs a trailing semicolon. The error message in 1.00 was not informative. It is improved in 1.01. -- Private members, and members in the own style, were not being assigned their default values in constructors. They are now. CHANGES IN VERSION 1.02 New option "nfi" (New From Instance) lets the constructor be invoked via a reference as well as a class name. New "-exclude" flag permits method exclusion. You get more control over how users can access a class. "parent" is deprecated in favor of "-parent". Values of -instance_var and -class_var flags are now checked to make sure they're valid identifiers. Generation of the base form is more (though not optimally) intelligent. Some bug fixes: -- The use of the -class_var flag wasn't checked in several places. -- In "mix" style, there was a reference to "pp" that should have been to "{pp}". CHANGES IN VERSION 1.03 Bug fixes: -- The -comment flag wasn't recognized. -- The conditions under which a constructor is needed have been expanded. Enhancements: -- Parent members may now be accessed from user-defined code in subclasses as regular variables. -- The key/value style is a little smarter about catching parameters that aren't members. CHANGES IN VERSION 1.04 The big change is the addition of protected members and methods to the object model. Other things: Bug fixes: -- The regexps for testing the validity of a member name let some erroneous names slip by. They have been corrected. -- A test for whether a subroutine name is known in a package was incorrectly implemented and sometimes resulted in a warning about an undefined value. It's been fixed. -- The MIX parameter passing style wasn't implementing the checks for extraneous parameters correctly. Enhancements: -- Hash-based members have a new accessor: $o->delete_x(k) deletes key k from hash-based member x of instance o. -- Added the nocopy option for members that should be assigned rather than copied during instance copying. -- The base type of a class is now saved in a variable _cginfo contained in the package implementing the class. This improves handling of classes saved to files. It simplifies the code for all classes to boot! CHANGES IN VERSION 1.05 Enhancements: -- The class() function now accepts the -parent flag. Classes can be specified in a style closer to C++, should you prefer. -- _cginfo (see version 1.04) now holds much more information than just a class' base type. Classes saved to files are almost completely identical to classes generated dynamically. CHANGES IN VERSION 1.06 Enhancements: -- Trailing semicolons are automatically appended to pre/post code if they were missing ("Do what I mean"). -- Diagnostics have been improved. -- A subroutine delete_class() has been added, to encapsulate the operation of deleting a class. CHANGES IN VERSION 1.07 Enhancements: -- Class::Generate now uses the warnings pragma added to Perl in version 5.6. CHANGES IN VERSION 1.08 Maintenance: -- The "require 5.8" statement has been changed to "use 5.008". CHANGES IN VERSION 1.09 Bug fixes: -- If a class method declares a subclass, then code-checking in the subclass didn't set up a framework that declared @ISA. This has been fixed. -- Constructor styles were not being properly recorded in classes that had no members. This caused saved classes to be incompletely specified when reloaded, so subclass declarations sometimes failed. This has been fixed. CHANGES IN VERSION 1.10 Bug fixes: -- A class that uses the "own" parameter style can pass a constant to a superclass. If this constant contains a single quote, that quote will appear in %_cginfo. Class::Generate was not escaping such quotes, so the code would fail. This has been fixed. Documentation: -- Two additional explanations have been added. One clarifies how default member values work. The other adds to the description of the "own" parameter style. CHANGES IN VERSION 1.11 Modernizations: -- The deprecated "defined %hash" expression is no longer used. Documentation: -- Corrected a sentence that used "array" where "hash" was meant.