use Types::Standard -types; my $state = StrMatch[qr/^[A-Z]{2}$/]; my $token = Str->where(sub { $database->check_valid_token($_) }); my $thing = Dict[token => $token, state => ArrayRef[$state]]; if ($thing->check($data)) { ...; }