2011-09-21 54 views
0

我使用的ActiveState Perl的5.12.4在Windows 7我試圖執行搜索和替換...Perl的:簡單的搜索和替換問題

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

你還沒有說過你將如何使用目錄名稱。如果您打算在不調用Windows「shell」的情況下在Perl中使用它,那麼您可以使用正斜槓而不是反斜槓。例如。/home/selenium/projects ... – tadmc

+0

雙引號字符串中的單反斜槓意味着您不期望的東西。啓用警告!有關詳細信息,請參閱http://stackoverflow.com/questions/6788117/how-can-i-convert-backward-slashes-to-forward-slashes-in-perl。 – daxim

回答

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//; 
-2

我這樣寫有baseTestDir更換selected_dir:

$selected_dir =~ s/$selected_dir/$baseTestDir/; 
+0

這不會做同樣的事情。我想從$ selected_dir中刪除$ baseTestDir。 – Dave

-1

您需要轉義\'s。

替換之前做

$baseTestDir =~ s/\\/\\\\/g;

+2

'quotemeta'或'/ Q /.../'是一種更清潔更通用的方法。 –