I'm not sure if you have a 'cut and paste' issue, but the code you supply has syntax errors. The hash declaration for %findReplaceH is not terminated with a ), and you have a q[ missing on one line. I get: "my" variable $folderPath masks earlier declaration in same scope at C
+:\gash.pl
line 17.
"my" variable $folderPath masks earlier declaration in same scope at C
+:\gash.pl
line 19.
Unmatched right square bracket at C:\gash.pl line 14, at end of line
syntax error at C:\gash.pl line 14, near "<TList.Item>]"
syntax error at C:\gash.pl line 68, near "print"
Execution of C:\gash.pl aborted due to compilation errors.
I added use warnings;
Update 2
Fixing these issues, I then found that neither subroutine is actually called, I guess you are missing a File::Find. Anyway, so I extracted the RE and and tried a simple test. This time I assumed that the data had embedded spaces, so I altered the RE:my %findReplaceH = (
q[<TList.Bullet>\\s*] =>q[<ul>],
q[\\s*</TList.Bullet>]=>q[</ul>],
q[<TList.Item>\\s*] =>q[<li>],
q[\\s*</TList.Item>]=>q[</li>],
);
my $useRegexQ = 1;
my $wholeFileString='<TList.Bullet><TList.Item> sometext </TList.Item>
+</TList.Bullet>';
my $replaceCount = 0;
foreach my $key1 (keys %findReplaceH) {
my $pattern = ($useRegexQ ? $key1 : quotemeta($key1));
$replaceCount = $replaceCount + ($wholeFileString =~
s/$pattern/$findReplaceH{$key1}/g);
};
print "$wholeFileString\n";
and it appears to work correctly without extra spaces:<ul><li>sometext</li></ul>
Note that I set $useRegexQ to force quotemeta |