在我们开始之前,
如果使用常量 SEEK_SET、SEEK_CUR 和 SEEK_END 而不是 0、1 和 2,结果会更清楚。
那么你的代码是
use Fcntl qw( SEEK_SET );
open IN, "<./test.txt";
seek(IN,10,SEEK_SET);
read IN, $temp, 5;
seek(IN,20,SEEK_SET);
close(IN);
顾名思义,它将位置设置为指定值。
So,
- 第一次查找后,文件位置将为 10。
- 之后
read
,文件位置将为 15。
- 第二次查找后,文件位置将为 20。
从视觉上看,
+-------------------------- 0: Initially.
| +---------------- 10: After seek($fh, 10, SEEK_SET).
| | +----------- 15: After reading "KLMNO".
| | | +------ 20: After seek($fh, 20, SEEK_SET).
| | | |
v v v v
file: ABCDEFGHIJKLMNOPQRSTUVWXYZ
indexes: 01234567890123456789012345
如果您想相对于当前位置进行查找,您可以使用SEEK_CUR
.
+-------------------------- 0: Initially.
| +---------------- 10: After seek($fh, 10, SEEK_CUR).
| | +----------- 15: After reading "KLMNO".
| | | +- 25: After seek($fh, 10, SEEK_CUR).
| | | |
v v v v
file: ABCDEFGHIJKLMNOPQRSTUVWXYZ
indexes: 01234567890123456789012345