#!/usr/bin/perl -T use strict; use warnings; use CGI; use CGI::Carp qw ( fatalsToBrowser ); use Data::Dump qw/ pp /; my $bom = "bom=\xEF\xBB\xBF"; my $junk = "junk=\xC3\x2E"; my $fun = sub { my $q = CGI->new( "$bom;$junk"); my $qbom = $q->param('bom'); my $qjunk = $q->param('junk'); $q->charset('UTF-8'); print $q->header('text/plain'), join "\n", pp($bom,$qbom),$qbom, pp($junk,$qjunk),$qjunk, "\n"; }; $fun->(); local $CGI::PARAM_UTF8 = $CGI::PARAM_UTF8 = 1; binmode STDOUT, ':encoding(UTF-8)'; $fun->(); __END__