The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 7;

package MyVal;
use Validation::Class;

package main;

my $r = MyVal->new(
    fields => {
        password  => {matches => 'password2'},
        password2 => {

            # ....
        },
    },
    params => {
        password  => 'secret$',
        password2 => 'secret$',
    }
);

ok $r->validate(), 'password validates';
$r->params->{password2} = 's3cret';

ok !$r->validate(), 'foobar doesnt validate';
ok $r->errors_to_string() =~ /password does not match password2/,
  'displays proper error message';

$r->fields->{password}->{label}  = 'pass (a)';
$r->fields->{password2}->{label} = 'pass (b)';

ok !$r->validate(), 'foobar doesnt validate';
ok $r->errors_to_string() =~ /pass \(a\) does not match pass \(b\)/,
  'displays proper error message';

$r->params->{password2} = '';

ok !$r->validate(), 'foobar doesnt validate';
ok $r->errors_to_string() =~ /pass \(a\) does not match pass \(b\)/,
  'displays proper error message';

#warn $r->errors_to_string();