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

看板Perl作者 (在我們的城市)時間12年前 (2012/10/05 15:48), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串1/1
小弟是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); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.235.207.136

10/05 17:14, , 1F
試試 my $ps = qq/system\\("ps >& ps.log"\\);/;
10/05 17:14, 1F

10/05 17:15, , 2F
以 \ 在 qq// 裡面讓 \ 跳脫出來
10/05 17:15, 2F

10/05 17:15, , 3F
再以剛剛跳脫後的 \ 在 s/// 裡面讓 ( 和 ) 跳脫出來
10/05 17:15, 3F

10/05 21:21, , 4F
可以使用 $RegLine =~ s/\Q$ps\E/$markps/g
10/05 21:21, 4F

10/05 21:24, , 5F
\Q...\E 能把所有東西跳脫開來
10/05 21:24, 5F

10/05 21:24, , 6F
詳情可搜尋quotemeta
10/05 21:24, 6F

10/05 21:41, , 7F
不用\Q...\E的話 $ps中的() 就要作escape
10/05 21:41, 7F

10/05 22:07, , 8F
剛剛發現從perl 5.14~5.16 quotemeta()的說明篇幅多了不少
10/05 22:07, 8F

10/08 09:33, , 9F
多謝指教~~ 我再去研究一下quotemeta !
10/08 09:33, 9F
文章代碼(AID): #1GRf3K4o (Perl)
文章代碼(AID): #1GRf3K4o (Perl)