8.13 ランダムアクセスファイルを更新する
バイナリファイルからレコードを読み込み、その値を変更して書き戻したい。
- 最初にレコードをreadして、対象の値を更新する。その更新した値をpackして、前のアドレスにseekして書き戻す。
use Fcntl; # SEEK_SET定数とSEEK_CUR定数を使用するため $ADDRESS = $RECSIZE * $RECNO; seek(FH, $ADDRESS, SEEK_SET) or die; read(FH, $BUFFER, $RECSIZE) == $RECSIZE or die; @FIELDS = unpack($FORMAT, $BUFFER); # フィールドを更新する $BUFFER = pack($FORMAT, @FIELDS); seek(FH, -$RECSIZE, SEEK_CUR) or die; print FH $BUFFER; close FH;