Subject: | In scalar context HTML::Widget::Result::param returns the first element of a parameter arrayref instead of the arrayref itself. |
Date: | Fri, 16 Mar 2007 11:56:39 -0700 |
To: | bug-HTML-Widget [...] rt.cpan.org |
From: | John Shields <jshields [...] mechanicnet.com> |
In the method from HTML::Widget::Result below the documentation clearly
states that calling the "param" method in scalar context for a
multi-valued parameter will return an arrayref to the values. Currently
the code returns the first value, not the arrayref itself. The fix is to
change line 389 from:
: $self->{_params}->{$param}->[0];
to
: $self->{_params}->{$param};
Of course, this can be worked around by always using list context...
Regards,
John
=head2 param
Arguments: $name
Return Value (scalar context): $value or \@values
Return Value (list context): @values
Returns valid parameters with a CGI.pm-compatible param method. (read-only)
=cut
sub param {
my $self = shift;
if ( @_ == 1 ) {
my $param = shift;
my $valid = $self->valid($param);
if ( !$valid || ( !exists $self->{_params}->{$param} ) ) {
return wantarray ? () : undef;
}
if ( ref $self->{_params}->{$param} eq 'ARRAY' ) {
return (wantarray)
? @{ $self->{_params}->{$param} }
: $self->{_params}->{$param}->[0];
}
else {
return (wantarray)
? ( $self->{_params}->{$param} )
: $self->{_params}->{$param};
}
}
return $self->valid;
}