FWIW, you don't need to know the name, param without args provides the names , Vars mangles (encodes, serializes, packs, implodes) the data, its backwards compatibility for some 1993 stuff
#!/usr/bin/perl --
use Data::Dump qw/ dd /;
use CGI;
my $q = CGI->new(q{a=b;a=c;d=e;f=g});
my %Vars = map { $_ => [ $q->param($_) ] } $q->param();
dd( $q );
dd( $q->Vars );
dd( \%Vars );
__END__
__END__
bless({
".charset" => "ISO-8859-1",
".fieldnames" => {},
".parameters" => ["a", "d", "f"],
"escape" => 1,
"param" => { a => ["b", "c"], d => ["e"], f => ["g"] },
"use_tempfile" => 1,
}, "CGI")
("a", "b\0c", "d" .. "g")
{ a => ["b", "c"], d => ["e"], f => ["g"] }
bless({
".charset" => "ISO-8859-1",
".fieldnames" => {},
".parameters" => ["a", "d", "f"],
"escape" => 1,
"param" => { a => ["b", "c"], d => ["e"], f => ["g"] },
"use_tempfile" => 1,
}, "CGI")
#!/usr/bin/perl --
use Data::Dump qw/ dd /;
use CGI;
my $q = CGI->new(q{a=b;a=c%00d;d=e;f=g});
my %Vars = map { $_ => [ $q->param($_) ] } $q->param();
dd( $q );
dd( $q->Vars );
dd( \%Vars );
__END__
bless({
".charset" => "ISO-8859-1",
".fieldnames" => {},
".parameters" => ["a", "d", "f"],
"escape" => 1,
"param" => { a => ["b", "c\0d"], d => ["e"], f => ["g"] },
"use_tempfile" => 1,
}, "CGI")
("a", "b\0c\0d", "d" .. "g")
{ a => ["b", "c\0d"], d => ["e"], f => ["g"] }
|