use Sub::Parms qw (:ignorecase :validate); sub some_method { MethodParms := $self, %args; my ($field_value, $another_field_value) = @args{'field_value','another_field'}; } sub some_function { ParmsHash := %args; my ($field_value, $another_field_value) = @args{'field_value','another_field'}; } sub _legal_thing { unless (defined ($_[0])) { return (0. 'Not defined'); } unless (int($_[0]) eq $_[0])) { return (0, 'Not an integer'); } return 1; } sub bind_parms_example { BindParms : ( my $handle := handle [required, is_defined, can=param]; my $thing := thing [optional, isa=CGI::Minimal]; my $another_thing := another [optional, type=SCALAR, validate=_legal_thing]; my $yathing := yathing [optional, is_defined]; my $defaulted := dthing [optional, default="help me"]; ) # ..... }