1package Params::Validate;
2
3use strict;
4use warnings;
5
6require XSLoader;
7XSLoader::load( 'Params::Validate', $Params::Validate::VERSION );
8
9
10my $default_fail = sub { require Carp;
11                         Carp::confess($_[0]) };
12
13{
14    my %defaults = ( ignore_case   => 0,
15		     strip_leading => 0,
16		     allow_extra   => 0,
17		     on_fail       => $default_fail,
18		     stack_skip    => 1,
19                     normalize_keys => undef,
20		   );
21
22    *set_options = \&validation_options;
23    sub validation_options
24    {
25	my %opts = @_;
26
27	my $caller = caller;
28
29	foreach ( keys %defaults )
30	{
31	    $opts{$_} = $defaults{$_} unless exists $opts{$_};
32	}
33
34	$OPTIONS{$caller} = \%opts;
35    }
36}
37
38sub _check_regex_from_xs { return ( defined $_[0] ? $_[0] : '' ) =~ /$_[1]/ ? 1 : 0 }
39
40BEGIN
41{
42    if ( $] >= 5.006 && $] < 5.007 )
43    {
44        eval <<'EOF';
45sub check_for_error
46{
47    if ( defined $Params::Validate::ERROR )
48    {
49        $Params::Validate::ON_FAIL ||= sub { require Carp; Carp::croak( $_[0] ) };
50
51        $Params::Validate::ON_FAIL->($Params::Validate::ERROR)
52    }
53}
54
55sub validate_pos (\@@)
56{
57    local $Params::Validate::ERROR;
58    local $Params::Validate::ON_FAIL;
59    local $Params::Validate::CALLER = caller;
60
61    my $r;
62    if (defined wantarray)
63    {
64        $r = &_validate_pos;
65    }
66    else
67    {
68        &_validate_pos;
69    }
70
71    check_for_error();
72
73    return wantarray ? @$r : $r if defined wantarray;
74}
75
76sub validate (\@$)
77{
78    local $Params::Validate::ERROR;
79    local $Params::Validate::ON_FAIL;
80    local $Params::Validate::CALLER = caller;
81
82    my $r;
83    if (defined wantarray)
84    {
85        $r = &_validate;
86    }
87    else
88    {
89        &_validate;
90    }
91
92    check_for_error();
93
94    return wantarray ? %$r : $r if defined wantarray;
95}
96
97sub validate_with
98{
99    local $Params::Validate::ERROR;
100    local $Params::Validate::ON_FAIL;
101    local $Params::Validate::CALLER = caller;
102
103    my $r;
104    if (defined wantarray)
105    {
106        $r = &_validate_with;
107    }
108    else
109    {
110        &_validate_with;
111    }
112
113    check_for_error();
114
115    my %p = @_;
116    if ( UNIVERSAL::isa( $p{spec}, 'ARRAY' ) )
117    {
118        return wantarray ? @$r : $r if defined wantarray;
119    }
120    else
121    {
122        return wantarray ? %$r : $r if defined wantarray;
123    }
124}
125EOF
126
127        die $@ if $@;
128    }
129    else
130    {
131        *validate      = \&_validate;
132        *validate_pos  = \&_validate_pos;
133        *validate_with = \&_validate_with;
134    }
135}
136
1371;
138
139__END__
140
141=head1 NAME
142
143Params::ValidateXS - XS implementation of Params::Validate
144
145=head1 SYNOPSIS
146
147  See Params::Validate
148
149=head1 DESCRIPTION
150
151This is an XS implementation of Params::Validate.  See the
152Params::Validate documentation for details.
153
154=head1 COPYRIGHT
155
156Copyright (c) 2004-2007 David Rolsky.  All rights reserved.  This
157program is free software; you can redistribute it and/or modify it
158under the same terms as Perl itself.
159
160=cut
161