The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
package Regcomp;
use vars qw(@ISA %types);
require ExtUtils::Constant::Base;
@ISA = 'ExtUtils::Constant::Base';

sub assignment_clause_for_type {
  my ($self, $type, $value) = @_;
  $value = uc $value;
  return "namedclass = complement ? ANYOF_N$value : ANYOF_$value;";
}

sub return_statement_for_notfound {
    "";
}

sub name_param {
  'posixcc';
}

sub namelen_param {
  'skip';
}

sub memEQ {
  "memEQ";
}

package main;

my @names = (qw(alpha ascii blank cntrl digit graph lower print punct upper
		xdigit), {name=>"alnum", value=>"ALNUMC"},
	     {name=>"space", value => "PSXSPC"},
	     {name=>"word", value=>"ALNUM",
	      pre=>'/* this is not POSIX, this is the Perl \w */'});

print Regcomp->C_constant ({breakout=>~0,indent=>20}, @names);