- ベストアンサー
URLエンコードの正規表現のoの効果
http://ash.jp/perl/tips_perl01.htm のサイトに # URLエンコード $arg =~ s/(\W)/'%'.unpack("H2", $1)/ego; と書かれていましたが、最後のoの効果が分かりません。 $argが何という文字であったなら、そのoが有る場合と 無い場合の違いが分かるのか、具体的な$argの値と一緒に 説明してください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは、ninmurai さん。CGI の件ではなかったのですか。 何もそう慌てて閉めなくても(^^; でも、私もご質問の意味を少々つかみ損ねていたのは事実ですので、 再度ご説明いたします。 >$argが何という文字であったなら、そのoが有る場合と 無い場合の違いが分かるのか $arg には URL 文字列が入るのですね。 $arg = "oshiete1.goo.ne.jp/kotaeru.php3?q=642085"; としましょう。すると、 $arg =~ s/(\W)/'%'.unpack("H2", $1)/ego; においては unpack の働きで[0-9A-Za-z_]以外の文字、 つまり「.」→「%2e」、「/」→「%2f」、 「?」→「%3f」、「=」→「%3d」という置換が行われます。 その結果 $arg は「oshiete1%2egoo%2ene%2ejp%2fkotaeru%2ephp3%3fq%3d642085」 となります。 このうち、それぞれ URL 中に1度しか現れない「/」「?」「=」に対しては 「o」オプションの効果は出ないのですが、「.」は4回現れますので、 その4回の置換の際に「o」を用いることで変数の展開は1回だけで済む、 つまりいちいち「.」が「$1」に代入されることはなくなりその分速くなる、 とこういうことです。これでよろしいでしょうか?
お礼
ありがとうございました。