- ベストアンサー
Perl初心者ですが
Perl初心者ですが、次の内容を説明してください。 $Word =~ s/(\W)/$escape{$1} ||= sprintf("%%%02X", ord($1))/eg;
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CGIに渡す文字列をエンコードしているのですね。 細かい関数の意味などや変数の意味は知っているものとして、説明します。 分からなかったら補足してください。 「\W」、つまりアルファベットや数字「以外」の特殊文字や漢字を、 %XXの形の16進数の数列に変換しています。 $Word='ほげ';は$Word='%A4%DB$A4%B2';に変換されますよね。 掲示板などのCGIの中に記述されていたものでしょうか? こうしておかないと渡されたCGIのほうで文字化けが起こったりして、 正しい文字列が渡されないのです。 ちなみに、この部分は$escape{$1}の部分がない次のスクリプトでも 同じように動くはずです。 $Word =~ s/(\W)/sprintf("%%%02X", ord($1))/eg; これならわかるでしょうか? じゃあ$escape{$1}はなにかというと、変換キャッシュとでもいうのかな。 sprintf関数は時間がかかるので、一度変換したことがある文字は、 その結果を%escapeというハッシュに保存しておいて使いたい。 つまりハッシュがあるときはそちらをつかい、ないときはsprintfの結果を代入するのが、「$escape{$1} ||=」の部分の意味ですね。 CGIやHTMLについてよく書いてあるページをリンクしておきますので、 そちらも参考にしてみてください。
お礼
丁寧な解答、ありがとうございました。 $escape{$1}のなぞが解けました。