• ベストアンサー

Perl初心者ですが

Perl初心者ですが、次の内容を説明してください。 $Word =~ s/(\W)/$escape{$1} ||= sprintf("%%%02X", ord($1))/eg;

質問者が選んだベストアンサー

  • ベストアンサー
  • y_oku
  • ベストアンサー率62% (25/40)
回答No.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についてよく書いてあるページをリンクしておきますので、 そちらも参考にしてみてください。

参考URL:
http://wakusei.cplaza.ne.jp/twn/wwwcgi3.htm#CgiEncode
nako
質問者

お礼

丁寧な解答、ありがとうございました。 $escape{$1}のなぞが解けました。

関連するQ&A