+{
+ package AccessorGroups::BeenThereDoneThat;
+
+ use strict;
+ use warnings;
+ use base 'Class::Accessor::Grouped';
+
+ __PACKAGE__->mk_group_accessors('simple', 'singlefield');
+ __PACKAGE__->mk_group_accessors('multiple', qw/multiple1 multiple2/);
+}
+
+
package AccessorGroups;
use strict;
use warnings;
use base 'Class::Accessor::Grouped';
-
-__PACKAGE__->mk_group_accessors('single', 'singlefield');
+__PACKAGE__->mk_group_accessors('simple', 'singlefield');
__PACKAGE__->mk_group_accessors('multiple', qw/multiple1 multiple2/);
-__PACKAGE__->mk_group_accessors('listref', [qw/lr1name lr1field/], [qw/lr2name lr2field/]);
-__PACKAGE__->mk_group_accessors('component_class', 'result_class');
+__PACKAGE__->mk_group_accessors('listref', [qw/lr1name lr1;field/], [qw/lr2name lr2'field/]);
+__PACKAGE__->mk_group_accessors('simple', 'runtime_around');
+__PACKAGE__->mk_group_accessors('simple', [ fieldname_torture => join ('', map { chr($_) } (0..255) ) ]);
-sub new {
- return bless {}, shift;
+sub get_simple {
+ my $v = shift->SUPER::get_simple (@_);
+ $v =~ s/ Extra tackled on$// if $v;
+ $v;
+}
+
+sub set_simple {
+ my ($self, $f, $v) = @_;
+ $v .= ' Extra tackled on' if $f eq 'singlefield';
+ $self->SUPER::set_simple ($f, $v);
+ $_[2];
+}
+
+# a runtime Class::Method::Modifiers style around
+# the eval/our combo is so that we do not need to rely on Sub::Name being available
+my $orig_ra_cref = __PACKAGE__->can('runtime_around');
+our $around_cref = sub {
+ my $self = shift;
+ if (@_) {
+ my $val = shift;
+ $self->$orig_ra_cref($val . ' Extra tackled on');
+ $val;
+ }
+ else {
+ my $val = $self->$orig_ra_cref;
+ $val =~ s/ Extra tackled on$// if defined $val;
+ $val;
+ }
};
+{
+ no warnings qw/redefine/;
+ eval <<'EOE';
+ sub AccessorGroups::runtime_around { goto $AccessorGroups::around_cref };
+ sub AccessorGroups::_runtime_around_accessor { goto $AccessorGroups::around_cref };
+EOE
+}
-foreach (qw/single multiple listref/) {
- no strict 'refs';
+sub new {
+ return bless {}, shift;
+};
- *{"get_$_"} = \&Class::Accessor::Grouped::get_simple;
- *{"set_$_"} = \&Class::Accessor::Grouped::set_simple;
+foreach (qw/multiple listref/) {
+ no strict 'refs';
+ *{"get_$_"} = __PACKAGE__->can('get_simple');
+ *{"set_$_"} = __PACKAGE__->can('set_simple');
};
1;