use strict; package Class::Accessor::Chained; use base 'Class::Accessor'; our $VERSION = '0.01'; sub make_accessor { my($class, $field) = @_; # Build a closure around $field. return sub { my($self) = shift; if (@_) { $self->set($field, @_); return $self; } else { return $self->get($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->set($field, @_); return $self; } }; } 1; __END__ =head1 NAME Class::Accessor::Chained - make chained accessors =head1 SYNOPSIS package Foo; use base qw( Class::Accessor::Chained ); __PACKAGE__->mk_accessors(qw( foo bar baz )); my $foo = Foo->new->foo(1)->bar(2)->baz(4); print $foo->bar; # prints 2 =head1 DESCRIPTION A chained accessor is one that always returns the object when called with parameters (to set), and the value of the field when called with no arguments. This module subclasses Class::Accessor in order to provide the same mk_accessors interface. =head1 AUTHOR Richard Clamp =head1 COPYRIGHT Copyright (C) 2003 Richard Clamp. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L =cut