$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Hier wird an dem "Wert" des einzelnen CGI-Parameters herumgeändert, d. h. das URL-enodung rückgängig gemacht.
(Hättest Du CGI.pm verwendet, wäre das alles gar nicht nötig gewesen.)
An dieser Stelle kannst Du natürlich auch weitere Änderungen vornehmen, etwa
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/"/"/g;
$value =~ s/ä/ä/g;
$value =~ s/ö/ö/g;
$value =~ s/ü/ü/g;
$value =~ s/Ä/Ä/g;
$value =~ s/Ö/Ö/g;
$value =~ s/Ü/Ü/g;
$value =~ s/ß/ß/g;
Das ist ein Code-Schnipsel, mit dem Du proprietäre
Sonderzeichen nach HTML-entities übersetzen würdest -
falls Du das Gegenteil brauchst, vertausche die beiden
Werte im "s"(ubstitute)-Befehl.
Die Frage ist, ob Du das für alle Parameterwerte brauchst
oder doch eher nur für einen einzigen (den Suchterm).
Dazu fehlt der umgebende Perl-Source.