Interestingly, the delete method seems to remove the respective entry only from $q->params, but not from $q->url_params (now guess which of the two I (have to) use).
You know what :) you don't really *have* to :) there are many options, patch CGI.pm, monkeypatch CGI, fix code ....
Besides this, I didn't get your code to work like I want. Perhaps I have another error, but at the moment it seems that $q->keywords is empty if the script is called without any parameters, so $q -> keywords evaluates to false in this case, and the code doesn't get executed anyways.
Yeah, if there are no keywords, don't delete keywords -- makes sense to me :)