Data::FormValidator + α

http://d.hatena.ne.jp/tomyhero/20070803/1186106207

上記の実装を以下に修正

  • required_only_oneの場合、missing にするのではなく、最初の一つ目だけを取るように修正
    if ( ref $valid{$field} eq 'ARRAY' ) {

                if ( exists $required_only_one{$field} or exists $optional_only_one{$field} ) {
                    if( (defined $valid{$field}->[0] and length $valid{$field}->[0] and $valid{$field}->[0] !~ /^\x00$/) ){
                        my $data = $valid{$field}->[0];
                        delete $valid{$field};
                        $valid{$field} =  $data;
                    }
                    else {
                        delete $valid{$field};
                    }
                    next;
                }

                for (my $i = 0; $i < scalar @{ $valid{$field} }; $i++) {
                    $valid{$field}->[$i] = undef unless (defined $valid{$field}->[$i] and length $valid{$field}->[$i] and $valid{$field}->[$i] !~ /^\x00$/);
                }
                # If all fields are empty, we delete it.
                delete $valid{$field} unless grep { defined $_ } @{$valid{$field}};

            }