2 package AccessorGroups::BeenThereDoneThat;
6 use base 'Class::Accessor::Grouped';
8 __PACKAGE__->mk_group_accessors('simple', 'singlefield');
9 __PACKAGE__->mk_group_accessors('multiple', qw/multiple1 multiple2/);
13 package AccessorGroups;
16 use base 'Class::Accessor::Grouped';
17 __PACKAGE__->mk_group_accessors('simple', 'singlefield');
18 __PACKAGE__->mk_group_accessors('multiple', qw/multiple1 multiple2/);
19 __PACKAGE__->mk_group_accessors('listref', [qw/lr1name lr1;field/], [qw/lr2name lr2'field/]);
20 __PACKAGE__->mk_group_accessors('simple', 'runtime_around');
23 my $v = shift->SUPER::get_simple (@_);
24 $v =~ s/ Extra tackled on$// if $v;
29 my ($self, $f, $v) = @_;
30 $v .= ' Extra tackled on' if $f eq 'singlefield';
31 $self->SUPER::set_simple ($f, $v);
35 # a runtime Class::Method::Modifiers style around
36 # the eval/our combo is so that we do not need to rely on Sub::Name being available
37 my $orig_ra_cref = __PACKAGE__->can('runtime_around');
38 our $around_cref = sub {
42 $self->$orig_ra_cref($val . ' Extra tackled on');
46 my $val = $self->$orig_ra_cref;
47 $val =~ s/ Extra tackled on$// if defined $val;
52 no warnings qw/redefine/;
54 sub AccessorGroups::runtime_around { goto $AccessorGroups::around_cref };
55 sub AccessorGroups::_runtime_around_accessor { goto $AccessorGroups::around_cref };
60 return bless {}, shift;
63 foreach (qw/multiple listref/) {
65 *{"get_$_"} = __PACKAGE__->can('get_simple');
66 *{"set_$_"} = __PACKAGE__->can('set_simple');