NAME
Params::Validate::Aggregated - separate aggregated parameters for functions
SYNOPSIS
use Params::Validate qw[ :all ];
use Params::Validate::Aggregated qw[ pv_disagg ];
my %spec;
$spec{func1} = { foo => { type => ARRAYREF },
bar => { type => SCALAR } };
sub func1 { my %args = validate( @_, $spec{func1} };
$spec{func2} = { goo => { type => ARRAYREF, optional => 1 },
loo => { type => SCALAR } };
sub func2 { my %args = validate( @_, $spec{func2} };
$spec{func} = { snack => 1, bar => 1 };
sub func {
my ( $agg, $xtra ) = pv_disagg( params => \@_, spec => \%spec);
die( "extra arguments passed to func\n" ) if %$xtra;
# the @{[]} ugliness is because validate is prototyped to require
# an array as the first argument.
my %aggs = validate(@{[$aggs->func]}, $spec{func} );
func1( $agg->func1 );
func2( $agg->func2 );
}
func( foo => 'f', bar => 'b', snack => 's', goo => 'g', loo => 'l' );
DESCRIPTION
When a function passes named parameters through to other functions, it can be tedious work to separate out parameters specific to each function.
Params::Validate::Aggregated::pv_disagg simplifies this, separating out parameter sets from an input list of parameters, using Params::Validate named parameter specifications to identify the sets. It takes into account any key normalization routines, and uses Data::Alias to ensure that there is no duplication of the input data. It can also handle the more complex situations were validate_with is used.
INTERFACE
- pv_disagg
-
( $agg, $xtra ) = pv_disagg( params => \@params, spec => \%specs, with => \%with, \%opts );Separate aggregated parameters into sets based upon Params::Validate specifications for named parameters.
The input parameters are passed in
@params, which has the same structure as the parameter list passed toParams::Validate::validate()andParams::Validate::validate_with().The sets of Params::Validate specifications are passed via
%specand%with, whose keys are used to label the output parameter sets.%spec's values are hashes as would be passed to Params::Validate::validate();%with's values are those that would be passed to Params::Validate::validate_with(). Internally the sets specified with%specare merged with those specified by%with. The%optsparameter may contain Params::Validate options which will be added to the specification sets passed in%spec.An output hash is created for each specification set and contains only the input parameters specific to the set. Parameter names are normalized before being compared if specifications use
normalize_keys. The keys used in the output hash are the original keys in the input list.The output hashes are returned in
$agg, which is a hash keyed off of the set names. The parameter values are aliased (via Data::Alias) to the values in@paramsto avoid copying.If the
allow_extraoption was not true for any of the specification sets, then any input parameters in@paramswhich did not appear in a specification set are returned in the$xtrahash. Ifallow_extrawas true for any of the sets, then$xtrawill be empty.$aggis blessed into the Params::Validate::Aggregated class and provides accessors for each set. When called in a list context, the accessors return the hash directly; when called in scalar context they return a hash reference:%hash = $agg->func1; $hashref = $agg->func2;
DIAGNOSTICS
CONFIGURATION AND ENVIRONMENT
Params::Validate::Aggregated requires no configuration files or environment variables.
DEPENDENCIES
INCOMPATIBILITIES
None reported.
BUGS AND LIMITATIONS
No bugs have been reported.
Please report any bugs or feature requests to bug-params-validate-aggregate@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Params-Validate-Aggregated.
SEE ALSO
LICENSE AND COPYRIGHT
Copyright (c) 2011 The Smithsonian Astrophysical Observatory
Params::Validate::Aggregated is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
AUTHOR
Diab Jerius <djerius@cpan.org>