不可解なところ

use encoding 'euc-jp';

上記は、すべての文字列を EUC-JP で利用する宣言と理解した。しかし、

$content = decode('shiftjis', $content); # コンテンツのコード変換

なぜ、Shift-JIS で取り込んだテキストデータを、Shift-JIS にデコードをして出力するのかわからない。例えば、

$content = decode('euc-JP', $content);

と書き換えると、

"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
"\x{fffd}" does not map to euc-jp at ./9.pl line 24.
\x{fffd}\x{fffd}\x{fffd}t\x{fffd}b\x{fffd}^\x{fffd}[\x{fffd}I\x{fffd}\x{fffd}

とエラーが表示される。また、読み込んだテキストデータが Shift-JIS だということで、

$content = encode('euc-JP', $content);

と書き換えて実行をすると、文字化けして表示される。

???t?b?^?[?I??
危険情報が出ています!
詳細は http://www.anzen.mofa.go.jp/ を見てください。

非常に基本的なことだからなのかわからないが、この decode 関数について詳細に書かれている資料が見つからない。