$ hexdump -C spw1006361.bin 00000000 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 |................| 00000010 08 00 09 00 0a 00 0b 00 0c 00 0d 00 0e 00 0f 00 |................| 00000020 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00 |................| 00000030 18 00 19 00 1a 00 1b 00 1c 00 1d 00 1e 00 1f 00 |................| 00000040 $ #### use strict; use warnings; use 5.014; use Fcntl qw{ :DEFAULT :seek }; use constant RECLEN => 2; my $binFile = q{spw1006361.bin}; sysopen my $binFH, $binFile, O_RDWR or die qq{sysopen: $binFile: $!\n}; my $origValue = readValue( $binFH, 7 ); say qq{Record 7 originally: $origValue}; writeValue( $binFH, 7, $origValue * 3 ); say qq{Record 7 now : @{ [ readValue( $binFH, 7 ) ] }}; close $binFH or die qq{sysopen: $binFile: $!\n}; sub readValue { my( $fh, $recNo ) = @_; sysseek $fh, $recNo * RECLEN, SEEK_SET or die qq{sysseek: $!\n}; my $bytesRead = sysread $fh, my $buffer, RECLEN; if ( not defined $bytesRead ) { die qq{sysread: $!\n}; } elsif ( $bytesRead == 0 ) { die qq{sysread: EOF\n}; } elsif ( $bytesRead != RECLEN ) { die qq{sysread: expected @{ [ RECLEN ] } bytes,}, qq{ got $bytesRead\n}; } else { return unpack q{v}, $buffer; } } sub writeValue { my( $fh, $recNo, $value ) = @_; sysseek $fh, $recNo * RECLEN, SEEK_SET or die qq{sysseek: $!\n}; my $bytesWritten = syswrite $fh, pack q{v}, $value; if ( not defined $bytesWritten ) { die qq{syswrite: $!\n}; } elsif ( $bytesWritten != RECLEN ) { die qq{syswrite: expected @{ [ RECLEN ] } bytes,}, qq{ wrote $bytesWritten\n}; } else { return; } } #### ]$ ./spw1006361 Record 7 originally: 7 Record 7 now : 21 $ #### ]$ hexdump -C spw1006361.bin 00000000 00 00 01 00 02 00 03 00 04 00 05 00 06 00 15 00 |................| 00000010 08 00 09 00 0a 00 0b 00 0c 00 0d 00 0e 00 0f 00 |................| 00000020 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00 |................| 00000030 18 00 19 00 1a 00 1b 00 1c 00 1d 00 1e 00 1f 00 |................| 00000040 $