電子書籍の厳選無料作品が豊富!

Perlで、下のように300の数を読み書きしたところ、
10、26、266、282
だけ正しく読み出せません。なぜですか?


open (FRED,"+<test");
$pack_format = "I";
$pack_length=length pack($pack_format,0);

for ($n=0;$n<300;$n++){
$age=$n;
seek(FRED,$pack_length*$n,0);
print FRED pack($pack_format,$age);
}

for ($n=0;$n<300;$n++){
seek(FRED,$pack_length*$n,0);
$qqq=read (FRED,$buf,$pack_length);
$age=unpack $pack_format,$buf;
print "/$n/$age/$qqq/\n";
}

A 回答 (1件)

環境が分からないので完全に再現させることはできませんでしたが、まず間違いなくバイナリデータをテキストモードで扱っているのが原因でしょう。


open の後に、
binmode FRED;
を入れてください。

参考URL:http://tohoho.wakusei.ne.jp/wwwperl2.htm#binmode
    • good
    • 0
この回答へのお礼

>まず間違いなくバイナリデータをテキストモードで扱っているのが原因でしょう。

全くそのとおりのようです。
>open の後に、
>binmode FRED;
を入れたら、期待どおりに動作しました。

さっそくありがとうございました。
数時間、いろいろやっても解決できませんでした。
大変たすかりました。

お礼日時:2004/03/06 23:02

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