in reply to UTF-8 and URL encoding

If the browser submits the form data in UTF-8 and tells the CGI script so, is it really CGI.pm's job to decode it transparently?

I'd say, it's up to the application to take care of that. You could use

use Text::Iconv; my $converter = Text::Iconv->new("utf-8", "iso-8859-1"); my $decoded = $converter->convert(param('test'));

to decode it if you know it's UTF-8 and it needs to be iso-8859.