重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

http://ash.jp/perl/tips_perl01.htm
のサイトに
# URLエンコード
$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;
と書かれていましたが、最後のoの効果が分かりません。
$argが何という文字であったなら、そのoが有る場合と
無い場合の違いが分かるのか、具体的な$argの値と一緒に
説明してください。

A 回答 (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」に代入されることはなくなりその分速くなる、
とこういうことです。これでよろしいでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2003/08/31 22:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!