Check out URI::Escape, your current escaping doesn't correctly handle a lot of common characters (in particular: single-quotes, plus signs, questions marks, etc...)
Instead of hardcoding a list of "sites" as method names, and then needing to write a seperate script for each one anyway, why not leave your module site agnostic -- and just make each script call "browser_cmdline" directly, passing the URL of the site (so you don't have to change the module just to add a new site).
Better still, why make yourself write a new script everytime you want to start searching a new site? why not just write a single script ("search" for example), that takes an optional "-site URL" argument (which defaults to something like "http://google.com/search?q=") and then just
use your shell's command aliasing feature to create quick ways to search really common sites...
alias google 'search -site "http://google.com/search?q="'
alias jeeves 'search -site "http://www.ask.com/main/askjeeves.asp?ask=
+"'
...