Movatterモバイル変換


[0]ホーム

URL:


functions /seek
(source,CPAN)
#seek FILEHANDLE,POSITION,WHENCE

Sets FILEHANDLE's position, just like thefseek(3) call of Cstdio. FILEHANDLE may be an expression whose value gives the name of the filehandle. The values for WHENCE are0 to set the new positionin bytes to POSITION;1 to set it to the current position plus POSITION; and2 to set it to EOF plus POSITION, typically negative. For WHENCE you may use the constantsSEEK_SET,SEEK_CUR, andSEEK_END (start of the file, current position, end of the file) from theFcntl module. Returns1 on success, false otherwise.

Note the emphasis on bytes: even if the filehandle has been set to operate on characters (for example using the:encoding(UTF-8) I/O layer), theseek,tell, andsysseek family of functions use byte offsets, not character offsets, because seeking to a character offset would be very slow in a UTF-8 file.

If you want to position the file forsysread orsyswrite, don't useseek, because buffering makes its effect on the file's read-write position unpredictable and non-portable. Usesysseek 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'sclearerr(3). A WHENCE of1 (SEEK_CUR) is useful for not moving the file position:

seek($fh, 0, 1);

This is also useful for applications emulatingtail -f. Once you hit EOF on your read and then sleep for a while, you (probably) have to stick in a dummyseek to reset things. Theseek doesn't change the position, but itdoes clear the end-of-file condition on the handle, so that the nextreadline FILE makes Perl try again to read something. (We hope.)

If that doesn't work (some I/O implementations are particularly cantankerous), you might need something like this:

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

Perldoc Browser is maintained by Dan Book (DBOOK). Please contact him via theGitHub issue tracker oremail regarding any issues with the site itself, search, or rendering of documentation.

The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via thePerl issue tracker, themailing list, orIRC to report any issues with the contents or format of the documentation.


[8]ページ先頭

©2009-2025 Movatter.jp