use threads; use strict; my $thr = threads->create ( sub { while (1) { eval { while (1) { worker(); } }; if ($@) { print "Error: <$@>.\n"; print "Error Occured: <$@>.\n"; $@=(); sleep (1); } } } ); sub worker { open FILE_OUT, "> /root/xyz" or die "Can't open file: $!"; } $thr->join; __END__ Name "main::FILE_OUT" used only once: possible typo at tmp.pl line 27. Error: . Error Occured: . Error: . Error Occured: . Error: . Error Occured: . Terminating on signal SIGINT(2)