use strict;
use warnings;
use Foo;
use CGI qw/:standard/;
my $q = CGI->new( { foo => 'bar', baz => 'Ovid' } );
my $foo = Foo->new;
print $foo->list_params( 1 );
print $foo->list_params( $q );
####
test.pl one=two red=blue red=herring bob= marley=bob
####
$VAR1 = {
'one' => 'two',
'red' => [
'blue',
'herring'
],
'marley' => 'bob',
'bob' => ''
};
$VAR1 = {
'foo' => 'bar',
'baz' => 'Ovid'
};
####
package Foo;
use strict;
use Data::Dumper;
sub new {
my $class = shift;
my ( $package ) = caller;
my $objref = { _package => $package };
bless $objref, $class;
}
sub list_params {
my ( $self, $cgi ) = @_;
my %formdata;
# Use this if OO CGI
if ( ref $cgi eq 'CGI' ) {
foreach my $key ( $cgi->param ) {
my @vals = $cgi->param( $key );
$formdata{ $key } = _format_vals( \@vals );
}
# Function-oriented CGI
} elsif ( $cgi ) {
{
# Don't try this at home, kids
no strict qw/ refs subs /;
my $_param = $self->{ '_package' }.'::param';
my $package = \%{$self->{ '_package' } . '::'};
# Looks like a function oriented call but 'param' was not exported
if ( ! exists $package->{ 'param' } ) {
return 0;
}
foreach my $key ( eval $_param ) {
my $_param_call = $_param . "($key)";
my @vals = eval $_param_call;
$formdata{ $key } = _format_vals( \@vals );
}
}
} else {
return 0;
}
Dumper( \%formdata );
}
sub _format_vals {
my $vals = shift;
@$vals == 1 ? @$vals[ 0 ] :
! @$vals ? undef :
$vals;
}
"Ovid";