Class::Accessor::Chained::Fast - Faster, but less expandable, chained accessors


Class-Accessor-Chained documentation Contained in the Class-Accessor-Chained distribution.

Index


Code Index:

NAME

Top

Class::Accessor::Chained::Fast - Faster, but less expandable, chained accessors

SYNOPSIS

Top

 package Foo;
 use base qw(Class::Accessor::Chained::Fast);

  # The rest as Class::Accessor::Chained except no set() or get().

DESCRIPTION

Top

By analogue to Class::Accessor and Class::Accessor::Fast this module provides a faster less-flexible chained accessor maker.

AUTHOR

Top

Richard Clamp <richardc@unixbeard.net>

COPYRIGHT

Top

SEE ALSO

Top

Class::Accessor::Fast, Class::Accessor::Chained


Class-Accessor-Chained documentation Contained in the Class-Accessor-Chained distribution.

use strict;
package Class::Accessor::Chained::Fast;
use base 'Class::Accessor::Fast';

sub make_accessor {
    my($class, $field) = @_;

    return sub {
        my $self = shift;
        if(@_) {
            $self->{$field} = (@_ == 1 ? $_[0] : [@_]);
            return $self;
        }
        return $self->{$field};
    };
}

sub make_wo_accessor {
    my($class, $field) = @_;

    return sub {
        my($self) = shift;

        unless (@_) {
            my $caller = caller;
            require Carp;
            Carp::croak("'$caller' cannot access the value of '$field' on ".
                        "objects of class '$class'");
        }
        else {
            $self->{$field} = (@_ == 1 ? $_[0] : [@_]);
            return $self;
        }
    };
}

1;