perlの質問。

[上に] [前に] [次に]
NAS [E-Mail] 1997/12/20(土) 22:35:51
はじめまして。perl入門2日目の新人、NASといいます。

とほほのCookie入門のページのサンプルプログラムの
$value =~ s/%([0-9A-F][0-9A-F])/pack("C", hex($1))/eg;
という行の%([0-9A-F][0-9A-F])の意味が分かりません。
初歩的な質問ですみません。よろしくお願いします。

とほほ 1997/12/20(土) 23:27:42
%5E などのように、1文字目が「%」で、2文字目が 0〜9 または A〜F
のいずれか、3文字目も 0〜9 または A〜F のいずれかである文字列。
という意味です。
(...)で囲んだのは、ひとつ目の(...)を $1 に対応させるためです。

NAS [E-Mail] 1997/12/21(日) 23:35:49
とほほさん、早速のRES(?)ありがとうございます。
つまり、[]で囲んだ物は、1文字として見られるんですね。
スペースなどをを%20とかに変換してから出力するのは
それらの文字コードを正確に受け取れないブラウザがあるからですか?
よろしければ、具体的にどのブラウザで問題が起こるのか
教えていただけませんか?
あと、split(/; */, $ENV{'HTTP_COOKIE'}という部分の
*の働きが良く分かりません。
MS-DOSのワイルドカードとは違うようですが
よろしければ教えてください。

とほほ 1997/12/25(木) 00:37:58
そうです。[ ]で囲んだ文字は1文字として見られます。

%20 とかに変換するのはブラウザ側で、ほとんどのブラウザがこうした
動作をします。したがって、CGIスクリプト側で %20 をスペースに戻し
てやる必要があります。それが $value =~ s/.../eg; なのです。

* は直前の文字が0個以上連続することを意味します。例えば、;_* は、
;_ や、 ;__ や、;______ にマッチします。

詳細は、「とほほのperl入門」を参照ください。

NAS 1997/12/25(木) 02:36:15
[[解決]]
とほほさんありがとうございました。
これから、「とほほのperl入門」に行ってみます。

[上に] [前に] [次に]