まっこと初心者で申し訳ないです

GETで得たURLエンコードがどうにもこうにも文字化けしたままなのです
環境はActivePerl 5.14.2 Build 1402 (64-bit)

ちょっとわけあってshiftjisで書いてます
ファイルの頭で文字コードを指定しています
use encoding "shiftjis";
binmode STDERR, ":encoding(shiftjis)";

送る側は
<form action="main.pl" method="get">
<input type="checkbox" name="tag" value="$xx">$xx ←日本語で数回分
<input type="submit" value="送信">
</form>

受ける側も同じファイルです
POSTかGETか判別して $alldata に入れた後

foreach my $tmp(split(/&/,$alldata))
{
print $tmp;
print "<BR>";
(my $key,my $val)=split(/=/,$tmp);

ここまではいいんですが

$val=~ tr/+/ /;
$val=~ s/%(..)/pack('H2', $1)/ge;
と、すると
「野外」 と入れたものが 「\x{fffd}O」 と表示され