とりあえずこんなかんじでいいのかな?

if( $ENV{'REQUEST_METHOD'} eq "POST" ){
read( STDIN, $argv, $ENV{'CONTENT_LENGTH'} );
@pairs =split( /&/, $argv );
}elsif( $ENV{'REQUEST_METHOD'} eq "GET" ){
@pairs =split( /&/, $ENV{'QUERY_STRING'} );
}else{
@pairs =@ARGV;
}

foreach( @pairs ){
( $key, $value ) =split( /=/ );

$key =~tr/+/ /;
$key =~s/%([a-fA-F0-9][a-fA-F0-9])/pack( "C", hex( $1 ) )/eg;

$value =~tr/+/ /;
$value =~s/%([a-fA-F0-9][a-fA-F0-9])/pack( "C", hex( $1 ) )/eg;

# $key =Jcode->new( $key )->h2z->euc;
# $value =Jcode->new( $value )->h2z->euc;

$param{$name}=$value;
}