プロが教える店舗&オフィスのセキュリティ対策術

よく見かける

$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;

というやつの pack("C", hex($1)) を chr($1) にした方がいい
と思ったんだけど、chr($1) のソースは見たことがないです。
chr($1) にするとうまくいかない場合があったりするんですか?

A 回答 (2件)

一般的には


$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
を使用しますが、chr関数を使用することもできますよ。
ただchr($1) だと、$1の中身を十進数の数値だと
解釈されてしまいますので、chr(hex($1))とする
必要があります。←$1の中身は16進数です
(ご存知かもしれませんが、hex関数は16進数の数値を十進数に変換するものです)

この回答への補足

ごめんなさい。
間違えて書いていました。

pack("C", $xx); は chr($xx); だから、

pack("C", hex($1)) を chr(hex($1))

としてもいいか聞きたかったんです。
でも、そういうお返事もらえてよかったです。
ありがとうございます。
pack() の代りに chr() は使えるんですね。

chr() の方がソースが短くなるし、
chr() の方が単純だから処理時間が早いと思うんだけど
pack() で書かれていることが多いから
フォームデコードでは chr() より pack()
の方が優れているところがあるのかなと思っています。
もし違いがあったら教えてください。

補足日時:2001/09/23 05:49
    • good
    • 0

昔はchr()がなかったんです。



たしか,Perl5で増えた新しい関数だったはず。

> $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;

これは昔からあるような,定番コードですからね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Perl4 では chr( ) が使えないから、
chr( ) のソースはあまりないということだったんですね。

お礼日時:2001/09/26 08:26

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