This might get you started
my $name = shift || die "Give an encoding!\n";
my $input = shift || "Some string...";
my $encoding = find_encoding($name)
or die "No encoding found for $name\n";
binmode STDOUT, ":encoding(UTF-8)";
print $encoding->decode($input), $/;
perl pm-977749 MacIcelandic "OHAI Ƌ"
perl pm-977749 MacRoman "OHAI Ƌ"
perl pm-977749 UTF-8 "OHAI Ƌ"
Basically, just find_encoding as declared by client, rejecting unknowns or customizing to handle them, and then decode. For customizing see the Pod for Encode and realize that of the thousands of named encodings out there, they mostly line up with the stock list Encode is aware of, you just might have to do some mapping of your own; I seem to recall the EUC-KR set having several different names in various standards for example.