sub match_RE_net_IPv4 { my $val = shift; no strict 'refs'; my $re = &RE_net_IPv4(-keep); return ($val =~ $re) ? $1 : undef; }; #### package Data::FormValidator::Constraints::Common; use 5.005; use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @ISA = qw(Exporter); $VERSION = '0.01'; BEGIN { @EXPORT = &_build_exports_from_regexp_common; use Symbol; use Regexp::Common 'RE_ALL'; sub _build_exports_from_regexp_common { my @exports; my $package_ref = qualify_to_ref('Regexp::Common::'); my @subs = grep(/^RE_/, keys(%{*{$package_ref}})); foreach my $sub (@subs) { my $dfv_name = 'match_'.$sub; print $dfv_name; *$dfv_name = sub { my $val = shift; no strict 'refs'; my $re = &$sub(-keep); return ($val =~ $re) ? $1 : undef; }; push @exports, '&'.$dfv_name; } return @exports; } } 1; #### # Integration with Regexp::Common; use Test::More tests => 3; use Data::FormValidator; my %FORM = ( bad_ip => 'oops', good_ip => '127.0.0.1', ); my $results; eval { $results = Data::FormValidator->check(\%FORM, { required => [qw/good_ip bad_ip/], validator_packages => 'Data::FormValidator::Constraints::Common', constraint_regexp_map => { '/_ip$/' => 'RE_net_IPv4', } }); }; warn $@ unless ok((not $@), 'runtime errors'); ok($results->('valid')->{good_ip}, 'good ip'); ok($results->('invalid')->{bad_ip}, 'bad ip');