>>648
指定が面倒そうだから一度エンコードしてデコードし直せば?
s/%([a-f\d]{2})/pack("H2",$1)/ieg;
s|([^\w/\.&%?~+=:@#\-])|'%'.unpack("H2",$1)|eg;