Я пытаюсь разработать сценарий, который принимает входной список verilog netlist и создает для этого тестовый стенд, поэтому, когда мы подключаем тестовый стенд к основному модулю по имени, мы делаем что-то вроде этого,
.a(a); .ext(ext); etc etc.
теперь у меня есть 120 входов для большего блока, как
`in1, in2... and some arrays like [31:0] ext; etc
Я хочу соответствовать шаблону .in1;и замените его как .in1 (in1);
Я пытаюсь
s/^\s+\.(.*)/\.$1\($1\)/g;
, поэтому он проверит строку, начинающуюся с пробелов, за которыми следует одиночный '.'символ, а затем все символы, и замените его шаблоном, показанным в строке оператора,
полный код следующим образом:
use strict;
use warnings;
my $filename = shift;
open (my $fh , "<" , $filename) or die $!;
open (my $pr , ">" , "D:/dump/testbench.v") or die $!;
my @code;
while (my $line = <$fh>)
{
chomp $line;
@code = (@code, $line);
}
#foreach my $i (0..$#code)
#{
#print "$code[$i]\n";
#}
#
foreach my $j (0..$#code)
{
if ($code[$j] =~ /^\s+\..*/)
{
print "$code[$j]\n";
$code[$j] =~ s/^\s+\.(.*)/\.$1\($1\)/g;
print "$code[$j]\n";
}
}
foreach my $k (0..$#code)
{
print $pr "$code[$k]\n";
}
close $pr;
Шаблон замены выполняет что-то вроде .in1;(in1;)
вместо.in1(in1);
и .[31:0] ext;([31:0] ext;)
.
как это сделать лучше?