hi,
das wäre bestimmt eine interessante Alternative, darf ich die mal bitte sehen?
Na klar, Du darfst das auch gerne an Deine Bedürfnisse anpassen ;-)
sub parseAll{
my @hq; # query
my @hi; # stdin
if( length($ENV{QUERY_STRING}) ){
push @hq, $ENV{QUERY_STRING};
}
# STDIN nur CONTENT_TYPE application/x-www-form-urlencoded
if($ENV{CONTENT_LENGTH}){
read(STDIN, my $pa, $ENV{CONTENT_LENGTH});
push @hi, $pa;
}
my $q = join('&', @hq, @hi);
# der eigentliche Parser
my %meta;
foreach my $pairs(split(/[&;]/, $q)){
my ($k, $v) = split('=', $pairs);
$v =~ tr/+/ /;
$v = uri_unescape($v);
$v =~ s/^\s+//; # Leerzeichen am Anfang raus
$v = unpack "A*", $v; # Leerzeichen und Newlines am Ende raus
push @{$meta{$k}}, $v;
}
return \%meta;
}
parseAll() wird nur einmal aufgerufen, die hashRef im return legst Du entweder auf eine globale Variable oder bindest Du an ein Objekt, hier die Objektvariante:
###########################################################################
# Parameter an das URL Object anfuegen
sub param{
my $self = shift; # das URL Object
my $key = shift; # Schlüssel zum Parameter
# Es muss erst eine Hashreferenz erzeugt werden
$self->{PARAM} = parseAll() if not defined $self->{PARAM};
if($key){
if(not exists $self->{PARAM}{$key}){ return }
elsif(wantarray){ return @{$self->{PARAM}{$key}}; }
else{ return $self->{PARAM}{$key}->[0]; }
}
else{
return keys %{$self->{PARAM}};
}
}
###########################################################################
$obj->param('feldname')
liefert Dir je nach Kontext ein Array (checkboxen oder multiple select) oder einen Einzelwert (input). Für uri_unescape() muss vorher das Modu URI::Escape eingebunden werden, schau da mal rein. Der Translater für das + Zeichen ist ein Rudiment, es gibt im URI Encoding entweder das '+' für Leerzeichen oder eine %20 Codierung, je nach Browser. Der Delimiter in der Parameterliste kann entweder das '&' oder das ';' sein, siehe Code. Praktisch ist die Entfernung der Leerzeichen am Anfang und Ende, das kannst Du halten wie Du möchtest.
Gute Nacht,
Horst Siebenschläfer (Bilch)