seek - Perldoc Browser

You are viewing the version of this documentation from Perl 5.6.2. View the latest version
#seek FILEHANDLE,POSITION,WHENCE

Sets FILEHANDLE's position, just like the fseek call of stdio. FILEHANDLE may be an expression whose value gives the name of the filehandle. The values for WHENCE are 0 to set the new position to POSITION, 1 to set it to the current position plus POSITION, and 2 to set it to EOF plus POSITION (typically negative). For WHENCE you may use the constants SEEK_SET, SEEK_CUR, and SEEK_END (start of the file, current position, end of the file) from the Fcntl module. Returns 1 upon success, 0 otherwise.

If you want to position file for sysread or syswrite, don't use seek--buffering makes its effect on the file's system position unpredictable and non-portable. Use sysseek instead.

Due to the rules and rigors of ANSI C, on some systems you have to do a seek whenever you switch between reading and writing. Amongst other things, this may have the effect of calling stdio's clearerr(3). A WHENCE of 1 (SEEK_CUR) is useful for not moving the file position:

seek(TEST,0,1);

This is also useful for applications emulating tail -f. Once you hit EOF on your read, and then sleep for a while, you might have to stick in a seek() to reset things. The seek doesn't change the current position, but it does clear the end-of-file condition on the handle, so that the next <FILE> makes Perl try again to read something. We hope.

If that doesn't work (some stdios are particularly cantankerous), then you may need something more like this:

 for (;;) {
	for ($curpos = tell(FILE); $_ = <FILE>;
 $curpos = tell(FILE)) {
	 # search for some stuff and put it into files
	}
	sleep($for_a_while);
	seek(FILE, $curpos, 0);
 }

AltStyle によって変換されたページ (->オリジナル) /