我在Windows 7上使用ActiveState perl 5.12.4。我正在尝试执行搜索并替换...
print "selected dir: $selected_dir basedir: $baseTestDir\n";
$selected_dir =~ s/$baseTestDir//g;
$selected_dir = "\home\selenium\projects\myco\AutomatedTests\MyCliUSA\Critical Path\Live\G Sedan"
和$baseTestDir = "\home\selenium\projects\myco\AutomatedTests\MyCliUSA"
的位置。但是,在搜索和替换语句之后,$selected_dir
保持不变。如何在此处正确实施搜索和替换?
答案 0 :(得分:4)
您没有将$baseTestDir
中的文本转换为正则表达式模式。这可以使用quotemeta
。
my $base_test_dir_pat = quotemeta($base_test_dir);
$selected_dir =~ s/^$base_test_dir_pat//;
也可以通过\Q..\E
在双引号和类似的字符串文字中访问它。
$selected_dir =~ s/^\Q$base_test_dir\E//;
可以省略尾随\E
。
$selected_dir =~ s/^\Q$base_test_dir//;
答案 1 :(得分:-1)
你需要逃避'\'。
做
$baseTestDir =~ s/\\/\\\\/g;
更换前。
答案 2 :(得分:-2)
我会编写以下内容来将selected_dir替换为baseTestDir:
$selected_dir =~ s/$selected_dir/$baseTestDir/;