The example input tcl file content:
# Bind
::d::autoBindmap $intfcName
-------------so many other lines------------------------------
############ Power information for vss #####################
#----------------------------
#pg_vss s100
#----------------------------
#Add pg_vss_dl interface
set intfcName pg_vss 1.0 s 100
#Add Verilog port binding for vss
::d::autoBindmap $module pg_vss $intfcName
{
VSSGND vss_dl;
}
############ Power information for vdd #####################
#----------------------------
#pg_vdd s100
#----------------------------
#Add pg_vdd_dl interface
set intfcName pg_vdd 1.0 s 100
#Add Verilog port binding for vss
::d::autoBindmap $module pg_vdd $intfcName
{
VDD vss_dl;
}
-----------------------so many other lines-------------------------------
#write component
::d::writeLib $module
Purpose: I have an array (which is generated from other part of code not presented here) consisting of strings. The array content is changing for different files. If any of the array elements are found in a particular line of the file using pattern matching I need to remove 11 lines after that and the line itself from a file.
Problem: This change should be made in current file itself. So, I tried opening the file in read-write mode. But, I am seeing garbage being printed.
For example (see input tcl file above):
I need to remove all the lines (in this case 11) till "}" after "Power information for $rpow " (for example $rpow is vss) is found, with the line itself being removed where vss is an element of my remove_power_list array. This removal should happen for all the array elements.
Please if anybody can solve this issue?
Only problematic code being presented here:
#####Used help of StackOverflow member Praveen to come up with this code
my $rpow;
for $rpow (@remove_power_list) {
my $bf_content;
open $bf_content, '+<', $bf_bind;
my $count = 0;
while (<$bf_content>){
if($_ =~ /Power\s+information\s+for\s+$rpow\s+/) {
$count = $. + 11;
}
else
{
if($count != 0 && $. < $count)
{
}
elsif($count != 0 && $. == $count)
{
$count =0;
}
else
{
print $bf_content $_;
}
}
}
close $bf_content;
}
Note: I cannot install cpan File::Slurp.
Expected example output:
# Bind
::d::autoBindmap $intfcName
-------------so many other lines------------------------------
############ Power information for vdd #####################
#----------------------------
#pg_vdd s100
#----------------------------
#Add pg_vdd_dl interface
set intfcName pg_vdd 1.0 s 100
#Add Verilog port binding for vss
::d::autoBindmap $module pg_vdd $intfcName
{
VDD vss_dl;
}
-----------------------so many other lines-------------------------------