我有以下代码,我试图用另一行替换文件中的certine行:
my %hFiles = (
"file.v" => {
"assign clk_2 = dft_clk_mux? clk : clk_2_r;" =>
"clock_mux2 U_clock_mux2 .a(clk_2_r), .b(clk), .sel(dft_clk_mux), .z(clk_2));",
},
);
foreach my $file ( keys %hFiles ) {
open( my $input_file_handle, "<", $file ) or die "Can't open input file $file\n";
open( my $output_file_handle, ">", "$result_dir/$file" ) or die "Can't create output file\n";
my $output_file_string = `cat $file`;
foreach my $line ( keys %{ $hFiles{$file} } ) {
$output_file_string =~ s/$line)\n/$hFiles{$file}{$line}\n/g;
print "$file\n$line\n$hFiles{$file}{$line}\n";
}
print $output_file_handle $output_file_string;
}
但是这个改变不起作用。我认为这是因为我的行包含regexp characther所以我试图将其替换为:
my %hFiles = (
"file.v" => {
"assign clk_2 = dft_clk_mux\? clk : clk_2_r;" =>
"clock_mux2 U_clock_mux2 \.a\(clk_2_r\), \.b\(clk\), .sel\(dft_clk_mux\), \.z\(clk_2\)\);",
},
);
但它仍然不起作用, 如何在文件中替换此行才能成功?
谢谢
答案 0 :(得分:1)
删除$line
后的括号并引用特殊字符:
$output_file_string =~ s/$line)\n/$hFiles{$file}{$line}\n/g;
变为:
$output_file_string =~ s/\Q$line\E\n/$hFiles{$file}{$line}\n/g;