- ベストアンサー
フォームデコード
よく見かける $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) にするとうまくいかない場合があったりするんですか?
- みんなの回答 (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進数の数値を十進数に変換するものです)
その他の回答 (1)
- onosuke
- ベストアンサー率67% (310/456)
回答No.2
昔はchr()がなかったんです。 たしか,Perl5で増えた新しい関数だったはず。 > $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; これは昔からあるような,定番コードですからね。
質問者
お礼
ありがとうございます。 Perl4 では chr( ) が使えないから、 chr( ) のソースはあまりないということだったんですね。
補足
ごめんなさい。 間違えて書いていました。 pack("C", $xx); は chr($xx); だから、 pack("C", hex($1)) を chr(hex($1)) としてもいいか聞きたかったんです。 でも、そういうお返事もらえてよかったです。 ありがとうございます。 pack() の代りに chr() は使えるんですね。 chr() の方がソースが短くなるし、 chr() の方が単純だから処理時間が早いと思うんだけど pack() で書かれていることが多いから フォームデコードでは chr() より pack() の方が優れているところがあるのかなと思っています。 もし違いがあったら教えてください。