The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use Encode;
use HTTP::Request;
use HTTP::Message::PSGI;

my @paths = (
    'П', '%D0%9F',
    decode_utf8('П'), '%D0%9F',
    'À', '%C3%80',
    decode_utf8('À'), '%C3%80',
);

while (my($raw, $encoded) = splice @paths, 0, 2) {
    my $req = HTTP::Request->new(GET => "http://localhost/" . $raw);
    my $env = $req->to_psgi;
    is $env->{REQUEST_URI}, "/$encoded";
    is $env->{PATH_INFO}, URI::Escape::uri_unescape("/$encoded");
    ok !utf8::is_utf8 $env->{PATH_INFO};
    ok !utf8::is_utf8 $env->{HTTP_HOST};
}

done_testing;