utf8フラグがよくわかっていない件

自分が文字コードについてわかっていないっぽい。


とあるサイト*1スクレイピング*2した結果をほげほげしようとしたら、
以下のような感じになった。

スクリプト
# テストの一部
{
    use Data::Dumper;

    # 最初のスクレイピング文字列
    diag "str :",Dumper($rs->{link}->{field});

    # utf8フラグONOFF
    diag "is_utf8:",utf8::is_utf8($rs->{link}->{field});

    # Encode::decode_utf8した結果
    diag "str decode_utf8:",Dumper(decode_utf8($rs->{link}->{field}));
    
    utf8::decode($rs->{link}->{field});
    # utf8::decodeした結果
    diag "str utf8::decode:",Dumper($rs->{link}->{field});
}
結果
# str :$VAR1 = "\x{e5}\x{85}\x{a8}\x{e5}\x{9b}\x{bd}\x{e4}\x{b8}\x{80}\x{e6}\x{8b}\x{ac}";
# is_utf8:1
# str decode_utf8:$VAR1 = "\x{e5}\x{85}\x{a8}\x{e5}\x{9b}\x{bd}\x{e4}\x{b8}\x{80}\x{e6}\x{8b}\x{ac}";
# str utf8::decode:$VAR1 = "\x{5168}\x{56fd}\x{4e00}\x{62ec}";


同じようなことをやっているつもりなのに結果が異なる。
それに自分が求めている結果は utf8::decode の結果なんだよなー。
うーん、勉強不足かな