0.3.2
RoPkg::Object is a general pourpose module, designed for Get/Set objects on which you don't want to spend your time writing annoying Get/Set methods. The primary use of the module is to be a base class.
package RoPkg::Person;
use strict; use warnings;
use RoPkg::Object;
use base qw(RoPkg::Object);
$pf = { FirstName => 'A person first name', LastName => 'A person last name' };
sub new { my ($class, %opt) = @_; my $self;
$self = $class->SUPER::new(%opt); $self->{methods} = $pf; $self->_inject();
return $self; }
1;
tester.pl #!/usr/bin/perl
use strict; use warnings;
use English qw(-no_match_vars); use RoPkg::Person;
sub main { my $p = new RoPkg::Person(); $p->FirstName('John'); $p->LastName('Doe');
print $p->FirstName,' ',$p->LastName,$RS; }
main();
All methods (besides new()) raise OutsiteClass exception if called outside a class instance. Each method, may raise other exceptions. Please read the documentation of that method for aditional information.
\$1
The class contructor. At this moment the constructor does nothing (besides bless). Search into methods list for a entry those value is $value. Returns the method name or 0 if such a method was not found. In list context this method will return a list of method names. In scalar context returns just the number of methods. Please note that only the valid methods are considered (tested with can($method_name)). Check the current object if the parameters specified in the list are defined. If a parameter is not defined a Param::Missing exception is raised.
As said before, this module is specially used as a base class for those objects with many \s-1SET/GET\s0 methods. How can you use this class in your project ? As seen in the \s-1SYNOPSIS\s0, when you create the new class, in the class constructor you call for $self->_inject method, who create (at runtime) the new methods. The list of methods who are gonna be created is actually a hash reference. A method can be specified like this:
FirstName => q{-}
This means, that _inject will create a get/set method named FirstName. There are some key values with special meaning:
If a existing method is available in the class and is also included in the list of methods who will be created by _inject, that method will be ignored by _inject. Each method created by _inject() has the following code:
sub { my ($self, $pval) = @_;
if ( !blessed($self) ) { OutsideClass->throw('Called outside class instance'); }
if ( defined $pval) { $self->{$method_name} = $pval; } return $self->{$method_name}; };
RoPkg::Object require perl 5.008 or later and the Scalar::Util module. To run the tests you also need:
This module is subject of tests. To run those tests, unpack the source and use the following command: make test
This module does not use any configuration file or environment variables.
None known to the author
No known bugs. If you find one please send a detailed report to me. Please note that the methods are not automatically created. One must manual call (inside the child object) the method who \*(L"injects\*(R" the new methods.
This module is perl critic level 1 compliant with 2 exceptions.
Subredu Manuel <[email protected]>
Copyright (C) 2005 Subredu Manuel. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The \s-1LICENSE\s0 file contains the full text of the license.