Class::HasA - Automatically create has-a relationships


Class-HasA documentation Contained in the Class-HasA distribution.

Index


Code Index:

NAME

Top

Class::HasA - Automatically create has-a relationships

SYNOPSIS

Top

  package Some::Mail::Thing;
  use Class::HasA ( [ qw/from to subject/ ] => "head" );
  # Equivalent:
  #  sub from { shift->head->from(@_) }
  #  sub to   { shift->head->to(@_) }
  #  ...

DESCRIPTION

Top

This module produces methods which encapsulates has-a relationships between objects. For instance, in the example above, a mail message has-a head object, and the from, to and subject methods act "through" the head object.

AUTHOR

Top

Simon Cozens, <simon@kasei.com>

COPYRIGHT AND LICENSE

Top


Class-HasA documentation Contained in the Class-HasA distribution.

package Class::HasA;

use 5.006;
use strict;
use warnings;
use Carp;

our $VERSION = '1.00';

sub import {
    my ($self, @args) = @_;
    croak "Wrong number of arguments to import" if @args & 1;

    while (my ($method, $how) = splice(@args, 0,2)) {
        my @methods = $method;
        @methods = @$method if ref $method eq "ARRAY";
        for $method (@methods) {
            no strict 'refs';
            *{caller()."::$method"} = sub { (shift->$how)->$method(@_) };
        }
    }
}

# Preloaded methods go here.

1;
__END__
# Below is stub documentation for your module. You'd better edit it!