-PR-
解決済み

Perl初心者ですが

  • 暇なときにでも
  • 質問No.20550
  • 閲覧数36
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (1/1)

Perl初心者ですが、次の内容を説明してください。

$Word =~ s/(\W)/$escape{$1} ||= sprintf("%%%02X", ord($1))/eg;
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル8

ベストアンサー率 62% (25/40)

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についてよく書いてあるページをリンクしておきますので、
そちらも参考にしてみてください。
お礼コメント
nako

お礼率 100% (1/1)

丁寧な解答、ありがとうございました。
$escape{$1}のなぞが解けました。
投稿日時 - 2000-12-20 12:33:36
-PR-
-PR-
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ