[Kansai-pm] pack('V',...)

Yasushi Nakajima nakajima at netstock.co.jp
Tue Jul 20 04:18:38 CDT 2004


 PDFJのMLで出たネタですが、PDFではなくPerlの側の問題なのでこちらでもレ
ポートしておきます。

  print unpack('V', pack('V', '1 0'));

というスクリプトを実行すると、Perl5.00503やPerl5.8.3では「1」と表示され
ます。ところがPerl5.6.1だと「0」になります。ちなみに'V'でなく'N'でも同様
です。

 pack('V',...) は数値を取って、リトルエンディアンでの32ビットlongのバイ
ナリ表現を得ます。Perl5.00503やPerl5.8.3では引数が文字列であれば自動的に
数値化してくれるので、'1 0'は数値の1と解釈されます。Perl5.6.1ではこれを
してくれません。

 ラクダ本や付属ドキュメントのpackの項ではpack('V',...)に文字列を与えた
ときにどうなるかは(私の読んだ限りでは)書いていないようです。ですから
Perl5.6.1の動作があながち間違いとも言えないのですが、Perlらしい動作はや
はり5.00503や5.8.3のものでしょうね。

-- 
Yasushi Nakajima <nakajima at netstock.co.jp>




More information about the Kansai-pm mailing list