]>
Dogcows Code - chaz/p5-CGI-Ex/blob - samples/benchmark/bench_validation.pl
3 use Benchmark
qw(timethese cmpthese countit timestr);
5 use Data
::FormValidator
;
8 username
=> "++foobar++",
17 match_error
=> '$name may only contain letters and numbers',
22 match
=> 'm/^[ -~]{6,30}$/',
25 # match => 'm/^[ -~]+$/',
29 validate_if
=> 'password',
34 match
=> 'm/^[\w\.\-]+\@[\w\.\-]+$/',
40 required
=> [qw(username password email)],
42 password
=> [qw(password2)],
45 email
=> qr/^[\w\.\-]+\@[\w\.\-]+$/,
46 password
=> qr/^[ -~]{6,30}$/,
47 username
=> qr/^\w+$/,
49 untaint_all_constraints
=> 1,
59 if (! exists $form->{'username'}) {
60 push @{ $hash->{'username_error'} }, 'Username required';
61 } elsif ($form->{'username'} !~ m/^(\w+)$/) {
62 push @{ $hash->{'username_error'} }, 'Username may only contain letters and numbers';
64 $form->{'username'} = $1;
66 if (! exists $form->{'password'}) {
67 push @{ $hash->{'password_error'} }, 'Password required';
69 if ($form->{'password'} !~ m/^([ -~]+)$/) {
70 push @{ $hash->{'password_error'} }, 'Password contained bad characters';
72 $form->{'password'} = $1;
74 if (length($form->{'password'}) < 6) {
75 push @{ $hash->{'password_error'} }, 'Password must be more than 6 characters';
76 } elsif (length($form->{'password'}) > 30) {
77 push @{ $hash->{'password_error'} }, 'Password must be less than 30 characters';
80 if (! defined($form->{'password2'})
81 || $form->{'password2'} ne $form->{'password'}) {
82 push @{ $hash->{'password2_error'} }, 'Password2 and password must be the same';
86 if (! exists $form->{'email'}) {
87 push @{ $hash->{'email_error'} }, 'Email required';
88 } elsif ($form->{'email'} !~ m/^[\w\.\-]+\@[\w\.\-]+$/) {
89 push @{ $hash->{'email_error'} }, 'Please type a valid email address';
97 cgi_ex
=> sub { my $t = CGI
::Ex
::Validate-
>validate($form, $val_hash_ce) },
98 data_val
=> sub { my $t = Data
::FormValidator-
>check($form, $val_hash_df) },
99 homegrown
=> sub { my $t = check_form
($form) },
103 cgi_ex
=> sub { my $t = CGI
::Ex
::Validate-
>validate($form, $val_hash_ce)->as_hash },
104 data_val
=> sub { my $t = Data
::FormValidator-
>check($form, $val_hash_df)->msgs },
105 homegrown
=> sub { my $t = scalar keys %{ check_form
($form) } },
109 ### Home grown solution blows the others away - but lacks features
111 # Benchmark: running cgi_ex, data_val, homegrown for at least 2 CPU seconds...
112 # cgi_ex: 2 wallclock secs ( 2.08 usr + 0.01 sys = 2.09 CPU) @ 2045.93/s (n=4276)
113 # data_val: 2 wallclock secs ( 2.15 usr + 0.00 sys = 2.15 CPU) @ 3496.28/s (n=7517)
114 # homegrown: 2 wallclock secs ( 2.09 usr + 0.01 sys = 2.10 CPU) @ 81919.52/s (n=172031)
115 # Rate cgi_ex data_val homegrown
116 # cgi_ex 2046/s -- -41% -98%
117 # data_val 3496/s 71% -- -96%
118 # homegrown 81920/s 3904% 2243% --
119 # Benchmark: running cgi_ex, data_val, homegrown for at least 2 CPU seconds...
120 # cgi_ex: 2 wallclock secs ( 2.11 usr + 0.00 sys = 2.11 CPU) @ 1696.68/s (n=3580)
121 # data_val: 2 wallclock secs ( 2.04 usr + 0.00 sys = 2.04 CPU) @ 2845.10/s (n=5804)
122 # homegrown: 2 wallclock secs ( 2.01 usr + 0.00 sys = 2.01 CPU) @ 83674.13/s (n=168185)
123 # Rate cgi_ex data_val homegrown
124 # cgi_ex 1697/s -- -40% -98%
125 # data_val 2845/s 68% -- -97%
126 # homegrown 83674/s 4832% 2841% --
This page took 0.047263 seconds and 4 git commands to generate.