When you run $dataToReplace =~ s/\#.*//; you are changing the $dataToReplace so that it no longer matches what is in $fileContent so nothing matches in the replace.
use strict; use warnings; use Data::Dumper;
my $replacementData=<<'REPDATA'
"new/path/desired/data"
"new/path/desired/data"
"new/path/desired/data"
REPDATA
;
populateHash();
sub populateHash{
my $fileContent;
if (0){
my $inputFile = 'input.txt';
$fileContent = do {
open(my $fileHandle, $inputFile ) or die "Could not open file
+'$inputFile ' $!";
local $/;
<$fileHandle>;
};
}
else { $fileContent = do { local $/;<DATA>;};}
my $hashData = truncateText($fileContent, "key1 => {", "key2 =>");
print 'hashdata:'.$hashData."\n\n";
# notice change to first END_SEARCHPATHS to match your sample data
my $dataToReplace = truncateText($hashData, "END_SEARCHPATHS", "EN
+D_SEARCH_PATHS");
print 'torep1:'.$dataToReplace."\n\n";
#Removes Comments works best if called multiple times
# $dataToReplace =~ s/\#.*//smg;
# $dataToReplace =~ s/\#.*//;
# $dataToReplace =~ s/\#.*//;
# $dataToReplace =~ s/\#.*//;
#print 'torep:2'.$dataToReplace."\n";
#replacementData was gathered in another function and stored i
+n a global variable
# notice addition of \n to replacement to put first on its own line
$fileContent =~ s/\Q$dataToReplace\E/\n$replacementData/;
print 'Res:'.$fileContent."\n";
# print Dumper($fileContent);
}
sub truncateText{
#Truncates text by removing everything before and and after the pa
+ssed in variables
my($text, $beginString, $endString) = @_;
my $truncatedText;
if($text =~ /\Q$beginString\E(.*?)\Q$endString\E/s){
$truncatedText = $1;
#print $truncatedText;
}
return $truncatedText;
}
__DATA__
key1 => {
#some data i don't need
#more data i don't need
<<'END_SEARCHPATHS',
#block of data I want to replace
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
END_SEARCH_PATHS
}
key2 => {
<<'END_SEARCHPATHS',
#another block of data to replace
"another/path/to/some/file"
"another/path/to/some/file"
"another/path/to/some/file"
"another/path/to/some/file"
END_SEARCH_PATHS
}
Result
hashdata:
#some data i don't need
#more data i don't need
<<'END_SEARCHPATHS',
#block of data I want to replace
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
END_SEARCH_PATHS
}
torep1:',
#block of data I want to replace
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
"some/path/to/some/file"
Res:key1 => {
#some data i don't need
#more data i don't need
<<'END_SEARCHPATHS
"new/path/desired/data"
"new/path/desired/data"
"new/path/desired/data"
END_SEARCH_PATHS
}
key2 => {
<<'END_SEARCHPATHS',
#another block of data to replace
"another/path/to/some/file"
"another/path/to/some/file"
"another/path/to/some/file"
"another/path/to/some/file"
END_SEARCH_PATHS
}