The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;

use utf8;

use Test::More tests => 7;
use Encode;

use_ok( 'CGI' );

ok( my $q = CGI->new, 'create a new CGI object' );

{
    no warnings qw/ once /;
    $CGI::PARAM_UTF8 = 1;
}

my $data = 'áéíóúµ';
ok Encode::is_utf8($data), "created UTF-8 encoded data string";

# now set the param.
$q->param(data => $data);

# if param() runs the data  through Encode::decode(), this will fail.
is $q->param('data'), $data;

# make sure setting bytes decodes properly
my $bytes = Encode::encode(utf8 => $data);
ok !Encode::is_utf8($bytes), "converted UTF-8 to bytes";
$q->param(data => $bytes);
is $q->param('data'), $data;
ok Encode::is_utf8($q->param('data')), 'param() decoded UTF-8';