Perl field-level input validation errors

Perl
use strict;
use warnings;

sub validate {
    my ($input, $rules) = @_;
    my %errors;
    for my $field (sort keys %$rules) {
        my $value = defined $input->{$field} ? $input->{$field} : '';
        $value =~ s/^\s+|\s+$//g;
        my $rule = $rules->{$field};
        if ($rule->{required} && $value eq '') { $errors{$field} = 'is required'; next; }
        next if $value eq '';
        $errors{$field} = "must be at least $rule->{min} characters" if $rule->{min} && length $value < $rule->{min};
        $errors{$field} //= 'has an invalid format' if $rule->{pattern} && $value !~ $rule->{pattern};
    }
    return \%errors;
}

my $errors = validate({ name => '  ', email => 'nope' },
    { name => { required => 1, min => 2 }, email => { required => 1, pattern => qr/^\S+\@\S+$/ } });
print "$_: $errors->{$_}\n" for sort keys %$errors;