in reply to read directory, fork processes

To make my process more efficient

If you are interested in efficiency then I suggest you don't use the ls(1) program to get your list of files:
while(1) { #@FILES = `ls -1 $DIRECTORY`; @FILES = glob("$DIRECTORY/*"); print "@FILES\n"; }
glob has a number of other advantages (and differences) apart from avoiding an extra child process each time you go around the loop. Using ls(1) results in a new-line at the end of each filename which (presumably) you have to remove, in addition you (presumably) have to prefix $DIRECTORY/ to each filename before you process it. You don't get any new-lines added with glob, and the directory name is included in the file name. Downside is that it does not handle directory names containing white-space (use File::Glob qw(glob); if that is an issue).

If you are running on Linux you might be interested in Linux::Inotify2 to monitor your directory.