use utf8 環境での日本語等の文字列リテラル には utf8フラグ が付くと思いますが、
$! の文字列には付かないのでしょうか?
手動で decode する以外に自動で付ける方法はないでしょうか?

以下のような感じの場合です。(※ LANG=ja_JP.UTF-8 で)

#!/usr/bin/perl -w
use strict;
use utf8;
binmode STDOUT => ':utf8';
binmode STDERR => ':utf8';

open(my $fh, '/dev/null');
print "★エラー = $!";