use Fcntl qw/:flock/; #list of directories to look in my @directoryList=('/dir/dir1','/dir2'); #for each dir foreach my $dir (@directoryList){ #open dir opendir(DIRHANDLE, "$dir ") or die "could't open dir $!"; #create array of files present in dir my @files= grep(!/^\./,readdir(DIRHANDLE)); #for each file test open and test lock foreach my $file (@files){ open FILE , "/$dir/$file" || die "Could not open"; #if lock obtained do your job if (flock (FILE,LOCK_EX)){ #do your job on $file } } }