split up query string and decode pairs into $val and $key insert $key into params hash with value $val #### foo.cgi?foo=mashed&foo=fried&foo=boiled&foo=tofu #### if (defined $params{$key} && ref($params{$key}) eq "ARRAY") { # key has been seen at least twice now # the value is a an anonymous array, push the new value push (@{$params{$key}}, $val); } elsif (defined($params{$key})) { # second time key has been seen # the value is a scalar, 'turn' it into an anonymous array $params{$key} = [$params{$key}, $val]; } else { # first time this key has been seen # assign the value as a scalar $params{$key} = $val; }