use strict; use warnings; use File::Copy; use File::Find::Rule; use File::Find; use File::Basename; my $source_dir = ""; my @doc=File::Find::Rule->file->name('*.xml')->in($source_dir); my $path=""; my @folders; find sub{ push @folders, "$File::Find::name" if (-d $File::Find::name); },$path; foreach my $fileformat (@doc){ my $baseFile=basename ($fileformat); $baseFile=~s/\.xml//isg;###handled xml for sake my @results = grep /$baseFile/, @folders; copy ($fileformat,@results); ###copied files to destination and matched }