Como detectar latin1 e UTF-8?

Estou extraindo seqüências de caracteres de um arquivo XML e, mesmo que deva ser puro UTF-8, não é. Minha ideia era

#!/usr/bin/perl
use warnings;
use strict;
use Encode qw(decode encode);
use Data::Dumper;

my $x = "m\x{e6}gtig";
my $y = "m\x{c3}\x{a6}gtig";

my $a = encode('UTF-8', $x);
my $b = encode('UTF-8', $y);

print Dumper $x;
print Dumper $y;
print Dumper $a;
print Dumper $b;

if ($x eq $y) { print "1\n"; }
if ($x eq $a) { print "2\n"; }
if ($a eq $y) { print "3\n"; }
if ($a eq $b) { print "4\n"; }
if ($x eq $b) { print "5\n"; }
if ($y eq $b) { print "6\n"; }

saídas

$VAR1 = 'm�gtig';
$VAR1 = 'mægtig';
$VAR1 = 'mægtig';
$VAR1 = 'mægtig';
3

sob a ideia de que apenas uma string latin1 aumentaria seu comprimento, mas a codificação de uma UTF-8 já também a torna mais longa. Portanto, não consigo detectar latin1 vs UTF-8 dessa maneira.

Pergunta, questão

Gostaria de acabar sempre com a string UTF-8, mas como posso detectar se é latin1 ou UTF-8, para converter apenas a string latin1?

Ser capaz de obter um sim / não se uma string for UTF-8 seria igualmente útil.

questionAnswers(1)

yourAnswerToTheQuestion