in reply to compilation errors

mising brackets I guess :-)
push (@template, $xtemplate =~ /\*{4}filename.ext\*{4}(.*?)\*{4}title\ +*{4}/sg; versus push (@template, $xtemplate =~ /\*{4}filename.ext\*{4}(.*?)\*{4}title\ +*{4}/sg);


Have a nice day
All decision is left to your taste
Update
read brackets as parens, and excuse my english ;-)