すいません。アホな質問ですがお願いします。

Perl5.8では内部の文字コード?がUTF-8であると聞きました。
しかし、日本語のテキストを処理する場合に、
trなどで全角1文字単位で扱おうとすると、
処理対象のテキストがUTF-8であっても、
Encode::decodeを使って
$_ = decode('utf8',$_);
などとする必要があるようです。これは何故なのでしょうか?
このdecodeは何をやってるんでしょう?

具体的には、テキスト中の全角数字を半角数字へ置換するスクリプトとして
以下のような物を書きました。(動きました)

use strict;
use utf8;
use Encode qw/ encode decode /;

while (<>){
$_ = decode('utf8',$_);
tr/0-9/0-9/;
print;
}