NAME

Params::Get - Get the parameters to a subroutine in any way you want

VERSION

Version 0.14

DESCRIPTION

Exports a single function, get_params, which returns a given value.

When used hand-in-hand with Params::Validate::Strict and Return::Set, you should be able to formally specify the input and output sets for a method.

SYNOPSIS

use Params::Get;
use Params::Validate::Strict;

sub where_am_i
{
    my $params = Params::Validate::Strict::validate_strict({
        args => Params::Get::get_params(undef, \@_),
        schema => {
            'latitude' => {
                type => 'number',
                min => -90,
                max => 90
            }, 'longitude' => {
                type => 'number',
                min => -180,
                max => 180
            }
        }
    });

    print 'You are at ', $params->{'latitude'}, ', ', $params->{'longitude'}, "\n";
}

where_am_i(latitude => 0.3, longitude => 124);
where_am_i({ latitude => 3.14, longitude => -155 });

METHODS

get_params

Parse the arguments given to a function. Processes arguments passed to methods and ensures they are in a usable format, allowing the caller to call the function in any way that they want e.g. `foo('bar')`, `foo(arg => 'bar')`, `foo({ arg => 'bar' })` all mean the same when called with

get_params('arg', @_);

or

get_params('arg', \@_);

Some people like this sort of model, which is also supported.

use MyClass;

my $str = 'hello world';
my $obj = MyClass->new($str, { type => 'string' });

package MyClass;

use Params::Get;

sub new {
    my $class = shift;
    my $rc = Params::Get::get_params('value', \@_);

    return bless $rc, $class;
}

The $default Parameter

The first argument is the $default parameter controls how single-argument calls are interpreted and provides a default key name for parameter extraction in those cases.

When no arguments are provided with a defined $default:

get_params('required'); # Throws usage error

The function requires either arguments or an undefined $default.

Usage Examples

  • Simple scalar parameter:

    sub set_country {
        my $params = get_params('country', @_);
        # Accepts: set_country('US')
        # Returns: { country => 'US' }
    }
  • Object constructor with options:

    sub new {
        my $class = shift;
        my $params = get_params('value', @_);
        # Accepts: MyClass->new($object)
        # Accepts: MyClass->new($object, { option => 'value' })
        # Returns: { value => $object } or { value => $object, option => 'value' }
    }
  • Hash parameter:

    sub configure {
        my $params = get_params('config', @_);
        # Accepts: configure({ db => 'mysql', host => 'localhost' })
        # Returns: { config => { db => 'mysql', host => 'localhost' } }
    }
  • Without default (named parameters only):

    sub process {
        my $params = get_params(undef, @_);
        # Accepts: process(name => 'John', age => 30)
        # Returns: { name => 'John', age => 30 }
    }

Caveats

  • When $default is defined and no arguments are provided, an error is thrown

  • There's no way to specify that a default parameter is optional

  • Single hash references always bypass the default parameter naming

AUTHOR

Nigel Horne, <njh at nigelhorne.com>

BUGS

Sometimes giving an array ref rather than array fails.

SEE ALSO

SUPPORT

This module is provided as-is without any warranty.

Please report any bugs or feature requests to bug-params-get at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Params-Get. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

You can find documentation for this module with the perldoc command.

perldoc Params::Get

You can also look for information at:

LICENCE AND COPYRIGHT

Copyright 2025-2026 Nigel Horne.

Usage is subject to the GPL2 licence terms. If you use it, please let me know.