The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.010;
use warnings;

use Test::More;
plan 'no_plan';

my %AcceptableVersions = (
    '0.95' => 1,
    '0.98' => 1,
    '1.01' => 1,
);

my %UnacceptableVersions = (
    '0.99' => 1,
    '1.00' => 1,
);

my $version_checker = do{
    use Regexp::Grammars;
    qr{
        <Valid_Language_Version>

        <rule: Valid_Language_Version>
              vers = <%AcceptableVersions>
            |
              vers = <badversion=%UnacceptableVersions>
              <fatal: (?{ "Cannot parse language version $MATCH{badversion}" })>
            |
              vers = <fatal:>
    }xms;
};

ok 'vers = 0.95' =~ $version_checker => 'Matched version 0.95';
ok @! == 0                           => 'with no error messages';

ok 'vers = 0.99' !~ $version_checker           => 'Correctly failed to match version 0.99';
ok @! == 1                                     => 'with correct number of error messages';
is $![0], 'Cannot parse language version 0.99' => 'with correct error message';

ok 'vers = 0.96' !~ $version_checker           => 'Correctly failed to match version 0.96';
ok @! == 1                                     => 'with correct number of error messages';
is $![0], q{Expected valid language version, but found '0.96' instead}
                                               => 'with correct error message';