in reply to HTML Decoding

$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;

No! Please do not escape your data until you need it escaped. Not always do you need those annoying backslashes there. PHP has this evil sort of auto-escapes for SQL queries mainly, but with Perl you can use DBI's excellent placeholders. Where you need it escaped, you can use quotemeta, or its interpolation shortcut \Q: "foo \Q$bar\E baz".

foreach $var (sort(keys(%CONFIG)))

Why sort? You're not using the new order!

my($var,$val) = split(/=/, $qs2[$i]);
$HTTP::QueryString::GLOENV{$var} = $val;

That overwrites earlier set variables. This is described in great detail in Ovid's CGI course. Basically, foo=bar&foo=bar&foo=bar is a valid query string, that sets foo to three values: bar, bar and bar. You'll use this with multiple equally named checkboxes, <select multiple> and probably more.

for( my $i=0; $i<=$#qs2; $i++ )

Do use Perl's for (ARRAY), because it's faster and easier: for (@qs2) {

And use strict!

U28geW91IGNhbiBhbGwgcm90MTMgY
W5kIHBhY2soKS4gQnV0IGRvIHlvdS
ByZWNvZ25pc2UgQmFzZTY0IHdoZW4
geW91IHNlZSBpdD8gIC0tIEp1ZXJk