Class-Accessor-Constructor
view release on metacpan or search on metacpan
my $test = Simple->new({ a => 1, b => 2 })
Suppose you have a class that has one preferred accessor, and you want
to simplify its usage so that if the constructor is called with a single
value, it is passed to that preferred accessor.
Given that the "Simple" class defines
sub MUNGE_CONSTRUCTOR_ARGS {
my $self = shift;
return %{ $_[0] } if @_ == 1 && ref($_[0]) eq 'HASH';
return (b => @_) if @_ % 2; # odd number of args
return @_;
}
then an object could be constructed like this
my $test = Simple->new('blah');
which would be munged to be equivalent to
my $test = Simple->new(b => 'blah');
If you define an "init()" method, the constructor calls it with the
munged args as the very last thing.
mk_constructor_with_dirty
Like "mk_constructor()", but also keeps track of whether the object has
been modified. This is useful, for example, when you have read the
object from a storage and at the end you want to write it back if it has
changed. This method generated saves you from having to update a
dirty-flag in each accessor. It achieves its purpose by doing a tie() on
the blessed hash that is the object, so there is some performance
penalty. But it also works when someone tries to break encapsulation by
accessing hash elements directly instead of going via the accessors. See
Class::Accessor::Constructor::Base for details.
If you want that behaviour only in a part of your inheritance tree,
redefine the constructor at the appropriate point. For example:
package Foo;
use base 'Class::Accessor::Constructor';
__PACKAGE__->mk_constructor;
package Bar;
use base 'Foo';
__PACKAGE__->mk_constructor_with_dirty;
Now objects of type "Foo" will not keep a dirty-flag, but objects of
type "Bar" and its descendants will.
mk_singleton_constructor
Like "constructor" but constructs a singleton object.
INSTALLATION
See perlmodinstall for information and options on installing Perl
modules.
BUGS AND LIMITATIONS
No bugs have been reported.
Please report any bugs or feature requests through the web interface at
<http://rt.cpan.org/Public/Dist/Display.html?Name=Class-Accessor-Constru
ctor>.
AVAILABILITY
The latest version of this module is available from the Comprehensive
Perl Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a
CPAN site near you, or see
<http://search.cpan.org/dist/Class-Accessor-Constructor/>.
The development version lives at
<http://github.com/hanekomu/Class-Accessor-Constructor> and may be
cloned from <git://github.com/hanekomu/Class-Accessor-Constructor.git>.
Instead of sending patches, please fork this project using the standard
git and github infrastructure.
AUTHOR
Marcel Gruenauer <marcel@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2007 by Marcel Gruenauer.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
( run in 1.515 second using v1.01-cache-2.11-cpan-39bf76dae61 )