my $profile = { index => { required => [ qw(firstname surname address1 postcode email) ], optional => [ qw(middlename address2 address3 address4) ], constraints => { postcode => '/^[A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}$/i', email => { constraint => sub { return valid_email($_[0]) && length($_[0]) <= 100; }, params => [ 'email' ], }, constraint_regexp_map => { '/name$/' => '/(?=^.{0,25}$)[[:print:]]*$/i', '/^address/' => '/(?=^.{0,50}$)[[:print:]]*$/i', }, }, };