Yet another example of why not to roll your own.
First of all you assumed that the query string only has
one name/value pair. What if it has more? Use a hash?
Well what if there are multiple name/value pairs? What if
someone for testing turns a post back into a get to
collect a URL and then wonders why their code broke?
Plus did you consider the poor schmuck who will use your
code with form data that has been modified in escaping? At
least you warned people that you got the first wrong. But
you should also be pointing people to URI::Escape so they
can decode the data.
No, it is far better to do as CGI intentionally does and
leave get/post transparent within the CGI so that the
developer can easily switch, and just use hidden form
elements as they were intended rather than trying to mix