package MyApp::Introspect; use Validation::Class; sub per_class { my ($self, $code) = @_; $self->proto->relatives->each(sub{ my ($alias, $namespace) = @_; # do something with each class $code->($namespace); }); } sub per_field_per_class { my ($self, $code) = @_; $self->per_class(sub{ my $namespace = shift; my $class = $namespace->new; foreach my $field (sort $class->fields->keys) { # do something with each field $code->($class, $class->fields->{$field}); } }); } 1;