use File::Find::Rule sub fullPathToFile #($StartDirectory,$SearchExpression) { my ($StartDirectory,$SearchExpression)= @_; my(@files,$IsWin1,$IsWin2,@File_Paths,$Fl,@d,$c); @files = File::Find::Rule->file()->name("$SearchExpression")->in("$StartDirectory"); $IsWin1=substr($StartDirectory,1,1); $IsWin2=substr($StartDirectory,0,2); #If $StartDirectory starts with D:\ or \\\\ than it is Win replace / with \ if(($IsWin1 eq ':')||($IsWin2 eq '\\\\')) { foreach $Fl (@files) { @d=split(/\//,$Fl); $c=join ("\\",@d); push(@File_Paths,$c); } } else { @File_Paths=@files; } return @File_Paths; } $LocationOfTheStartDir='C:\chat'; $SearchExp='*.htm'; @AllFilePaths=fullPathToFile($LocationOfTheStartDir,$SearchExp); foreach $InputFile (@AllFilePaths){ @AllLinesFromTheFile = `type $InputFile`; foreach $line (@AllLinesFromTheFile){ if ($line=~/DesiredString/){ print "$line"; } } @AllLinesFromTheFile=(); }