HTML内のJavaScriptに値を安全に埋め込む際のフィルタモジュー JavaScript::Value::Escape がVersion 0.04になってます。ちょっと時間が経っているけど紹介
まず、0.04でgfx氏によりドキュメントが増えたり修正されました。感謝感謝です。あと、javascriptvalueescape っていう関数名が長いので、jsという名前でもExportすることができるようになっています
use JavaScript::Value::Escape qw/js/;
です。テンプレートエンジンに組み込む際にはこっちの名前にしたほうがわかりやすいとは思いますが、直接jsをテンプレートエンジンに設定するより、escape_html と組み合わせて関数を自前で用意するのが個人的にお勧め。
もう一つが動作の変更で、Version 0.01 でよりもEscape対象となる文字が増えています。Version 0.04 では、q!”!、q!’!、q!&!、q!=!、q!-!、q!+!、q!;!、q!!,、q!/!、q!! 、と\x{2028}(LINE SEPARATOR)、\x{2029}(PARAGRAPH SEPARATOR)、さらにアスキーの制御文字、\x00-\x1f、\x7fがEscapeの対象となりました。\x{2028}、\x{2029}を扱うので、Perlのテキスト文字列を利用するのが推奨です。ただしバイナリ文字列でもエラーにはなりません。
エスケープする文字にはおそらくエスケープする必要のない文字が含まれていますが、これはDjangoのテンプレートエンジンにあわせた物となっています。
JavaScript::Value::EscapeをPerlテキスト文字列で利用すればおそらく安全にHTML内のJavaScriptに値を埋め込むことができると思いますが、それ以降の処理でXSSを起こさないようJavaScriptのコードとテキストの内容に気を使う必要があるのは変わっていませんのでご注意ください。