+sub AUTOLOAD {
+ our $AUTOLOAD;
+
+ my $self = shift;
+ my $method = $AUTOLOAD;
+ $method =~ s/.*:://;
+
+ return if $method eq 'DESTROY';
+
+ if ($method =~ m/^get_/) {
+ $method = substr $method, 4;
+ return $self->data->{$method} if exists $self->data->{$method};
+ croak "Invalid method 'get_${method}'";
+ }
+
+ croak "Invalid method '${method}'" if !$self->can($method);
+ return $self->$method(@_);