use File::Tail (); { local *CATLOG; if ($opt{'c'}) { open CATLOG, '<', $MAILLOG or die("Unable to open mail log: $!\n"); } else { tie *CATLOG, 'File::Tail', (name => $MAILLOG, tail => -1); } while () { ...while loop code here... } }