On Saturday 26 Sep 2009 03:18:35 Steve Bertrand wrote:
> Hi all,
> 
> I've read a fair bit about named params, and have been hit by bugs by
> overlapping lists into hashes etc.
> 
> Below is a method that essentially isn't truly a 'captcha', but is
> something I use to 'ensure' that the person clicking the submit button
> on a web gui isn't clicking by accident. This was to avoid having to
> write intermediary "Confirm" stages for potentially dangerous actions.
> (this is all for internal staff... if they fsck things up after this
> stage, they get to rewrite things themselves ;)
> 
> Instead of re-writing the code continuously, I finally decided to just
> move it to the base class.
> 
> I'm concerned about how I slurp in my params. For some reason, it
> 'feels' very dangerous to me.
> 
> Can someone recommend the reading I need to do to ensure that I've been
> over the possible ramifications? IOW, I'd like to spend more time
> learning about the type of params one should use, when they should be
> used, and when certain param types MUST be used (irt standard types, and
> refs).
> 
> Just to include some code:
> 

A few notes.

> sub captcha {
> 
>     my $self    = shift;
>     my %params  = @_;
> 

My personal preference is to do something like:

{{{
my $params = shift;
}}}

And pass it as a

<<<<<<<<
$self->my_method(
        {
                %hash,
        }
)
>>>>>>>>

This way it is faster and more robust than clobbering the hash into @_.

>     if ( ! %params ) {
> 
>         my $captcha_length = $self->CAPTCHA_LENGTH();
> 
>         my $captcha;
> 
>         for ( 1 .. $captcha_length ) {
>             $captcha .= int( rand( 10 ));
>         }
> 
>         return $captcha;
>     }
> 
>     my $captcha = $params{ -captcha };
>     my $input   = $params{ -input };

You shouldn't use a leading "-" for the parameter keys. Just do:

<<<<<<<<
my $captcha = $params{captcha};
my $input = $params{input};
>>>>>>>>

"-" is a remnant from the olden days.

Now to answer your question - you may wish to look at Params::Validate and 
similar modules:

http://search.cpan.org/dist/Params-Validate/

Regards,

        Shlomi Fish

> 
>     if ( ! $captcha || ! $input ) {
>         return 1;
>     }
> 
>     if ( $captcha eq $input ) {
>         return $captcha;
>     }
> 
>     return 0;
> }
> 
> Steve
> 

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
Why I Love Perl - http://shlom.in/joy-of-perl

Chuck Norris read the entire English Wikipedia in 24 hours. Twice.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to