• ベストアンサー

フォームデコード

よく見かける $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) にするとうまくいかない場合があったりするんですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

一般的には $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進数の数値を十進数に変換するものです)

A__
質問者

補足

ごめんなさい。 間違えて書いていました。 pack("C", $xx); は chr($xx); だから、 pack("C", hex($1)) を chr(hex($1)) としてもいいか聞きたかったんです。 でも、そういうお返事もらえてよかったです。 ありがとうございます。 pack() の代りに chr() は使えるんですね。 chr() の方がソースが短くなるし、 chr() の方が単純だから処理時間が早いと思うんだけど pack() で書かれていることが多いから フォームデコードでは chr() より pack() の方が優れているところがあるのかなと思っています。 もし違いがあったら教えてください。

その他の回答 (1)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

昔はchr()がなかったんです。 たしか,Perl5で増えた新しい関数だったはず。 > $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; これは昔からあるような,定番コードですからね。

A__
質問者

お礼

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

関連するQ&A