На cpan есть прекрасный и хорошо вам знакомый модуль LWP::UserAgent

Запустив нижеследующий тестовый скрипт с кириллическим доменом вида http://россия.рф, мы получим 500-ую ошибку вида: 500 Can't connect to xn--aca0d8k7a0jdddbd.xn--ai3ub:80 (Bad hostname)

require LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
 
my $response = $ua->get('http://россия.рф/');
 
if ($response->is_success) {
	print $response->decoded_content;
}
else {
	die $response->status_line;
}

Решение:

Ставим Encode, если не стоит.

sudo cpan Encode

Результат:

use Encode qw/decode/;
require LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;

my $response = $ua->get(decode('utf8', 'http://россия.рф/'));
 
if ($response->is_success) {
	print $response->decoded_content;
}
else {
	die $response->status_line;
}