sub param { my $self = shift; my (@data) = (@_); # First use? Create new __PARAMS! $self->{__PARAMS} = {} unless (exists($self->{__PARAMS})); my $rp = $self->{__PARAMS}; # If data is provided, set it! if (scalar(@data)) { # Is it a hash, or hash-ref? if (ref($data[0]) eq 'HASH') { # Make a copy, which augments the existing contents (if any) %$rp = (%$rp, %{$data[0]}); } elsif ((scalar(@data) % 2) == 0) { # It appears to be a possible hash (even # of elements) %$rp = (%$rp, @data); } elsif (scalar(@data) > 1) { croak("Odd number of elements passed to param(). Not a valid hash"); } } else { # Return the list of param keys if no param is specified. return (keys(%$rp)); } # If exactly one parameter was sent to param(), return the value if (scalar(@data) <= 2) { my $param = $data[0]; return $rp->{$param}; } return; # Otherwise, return undef } # /param