$q=~s/(\"|\'|<|>)//g;
これは半分間違い。まず先頭二つはエスケープ不要。

RFC的には
$q=~s/("|<|>)//g;

セキュリティ的には
$q=~s/("|'|:|\(|\)|<|>)//g;