use File::Find; use threads; use threads::shared; my $user :shared = $cargs{u}; my $uidNum :shared = getpwnam($user); my $user_file :shared = "/var/tmp/test_$user.file.list"; my @array_to_write :shared; my $thr1 = threads->create(\&find, \&findFiles, "/var/tmp"); my $thr2 = threads->create(\&find, \&findFiles, "/tmp"); $thr1->join(); $thr2->join(); print "Saving the details to $user_file\n"; saveFile($user_file,@array_to_write); exit; sub findFiles { my ($dev,$ino,$mode,$nlink,$uid,$gid,$file,$fstype); $file=$File::Find::name; lock(@array_to_write); (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($file)) && !($File::Find::prune |= ($dev != $File::Find::topdev)) && ($uid == "$uidNum") && push (@array_to_write,"$file:$uidNum:$gid:$mode:$fstype"); } sub saveFile{ my($file,@data)=@_; open(F,">$file") or die("Error:Failed to open $file for write:$!\n"); print F (join("\n",@data) . "\n"); close(F); }