use utf8とencoding、decode

Perlで日本語処理を行うときに欠かせないエンコーディング
これってわかりにくくありません?
自慢じゃないですが、小生は毎回混乱します(本当に自慢じゃない)。


基本的には
http://www.rwds.net/kuroita/program/Perl_unicode.html
に盲目的にしたがってコードを書けば、まず問題ないのですが
正しい理解を得る上で何が混乱を引き起こすかというと、UTF8フラグですよね。
use utf8;
を宣言し、コード内の日本語をUTF8で記述。
そして、外部から入力される日本語に全てUTF8フラグを立てると
日本語を使った正規表現もお手の物なわけですが
UTF8フラグを立てる方法が
ファイルハンドルが対象のときは
open IN, "<:encoding(euc-jp)", "hoge.txt"; と"encoding"なのに対して、変数では $str = Encode::decode("ascii", $str); と"decode"なわけですよ、"encode"じゃなく。 なんという罠。なんど引っ掛かったことかと(自らの学習能力のなさに愕然)。

ま、逆に、この点さえ抑えておけば話は簡単なので
ここにメモしとこうと思った次第。