Gossamer Forum
Home : General : Perl Programming :

What is seek used for?

Quote Reply
What is seek used for?
What is seek used for in perl?

Thanks,
Vivitron
Quote Reply
Re: What is seek used for? In reply to
From perldoc -f seek:

Quote:
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' from either the `IO::Seekable' or the
POSIX 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 (; Wink {
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);
}

Cheers,

Alex