The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp::Feature::Control::SplitValue;

use Moose;

with qw( 
    Form::Factory::Feature
    Form::Factory::Feature::Role::Control
    Form::Factory::Feature::Role::ControlValueConverter
);

has join_by => (
    is        => 'ro',
    isa       => 'Str',
    required  => 1,
    default   => ', ',
);

has split_by => (
    is        => 'ro',
    isa       => 'RegexpRef',
    required  => 1,
    default   => sub { qr{\s*,\s*} },
);

sub check_control { 
    my ($self, $control) = @_;
    die "not a scalar valued control"
        unless $control->does('Form::Factory::Control::Role::ScalarValue');
}

sub value_to_control {
    my ($self, $value) = @_;
    return join $self->join_by, @$value;
}

sub control_to_value {
    my ($self, $value) = @_;
    return [ split $self->split_by, $value ];
}

package Form::Factory::Feature::Control::Custom::SplitValue;
sub register_implementation { 'TestApp::Feature::Control::SplitValue' }

1;