Perl5 リファレンス



       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 `' 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); $_ = ;
                            $curpos = tell(FILE)) {
                           # search for some stuff and put it into files
                       }
                       sleep($for_a_while);
                       seek(FILE, $curpos, 0);
                   }


Perl5リファレンスに戻る