[問題] 搜尋取代字串包含雙引號

作者: cenda (十八尖山下智缺)   2012-10-05 15:48:33
小弟是Perl的初學者
都是靠GOOGLE大神教我的
這邊我遇到一個問題
就是我在搜尋字串並且取代的時候
因為要搜尋的字串包含雙引號 "
所以一直無法正確搜尋並且取代
請高手賜教 感謝
my $ps = qq/system("ps >& ps.log");/;
my $markps = qq/#system("ps >& ps.log");/;
open (PS, "<A.pl");
my @PS =<PS>;
close (PS);
for my $RegLine(@PS)
{
if ($RegLine =~ s/$ps/$markps/g)
{
open (PS, ">A.pl");
print PS @PS;
close (PS);
}
}
作者: cibs (0)   0000-00-00 00:00:00
試試 my $ps = qq/system\\("ps >& ps.log"\\);/;以 \ 在 qq// 裡面讓 \ 跳脫出來再以剛剛跳脫後的 \ 在 s/// 裡面讓 ( 和 ) 跳脫出來
作者: micangela (嘟)   0000-00-00 00:00:00
可以使用 $RegLine =~ s/\Q$ps\E/$markps/g\Q...\E 能把所有東西跳脫開來詳情可搜尋quotemeta
作者: flu (Crazy Rhythm)   0000-00-00 00:00:00
不用\Q...\E的話 $ps中的() 就要作escape剛剛發現從perl 5.14~5.16 quotemeta()的說明篇幅多了不少
作者: cenda (十八尖山下智缺)   0000-00-00 00:00:00
多謝指教~~ 我再去研究一下quotemeta !

Links booklink

Contact Us: admin [ a t ] ucptt.com