確かに、理論的には不可能だが

->decode($str) if $str =~ m/^(?:%[a-fA-F0-9][a-fA-F0-9])+$/;

で、十分実用に耐えると思うが・・・

エンタープライズとかだと、デコードしてないと
error 400になるけど