Why would having two loops cause the file handle position to be reset? I'd be upset if it did, because sometimes it makes sense to read a file in more than one loop and do something like:
while (<$fh>) {
..read/process file header
last if /End-Of-Header/;
}
while (<$fh>) {
...read/process file body
}