看板 Programming 關於我們 聯絡資訊
eval 少用,建議使用 qr{ pattern } 譬如 $pattern = qr/^a\/(.*)/; 比對時,可直接使用,如: $str =~ s/$pattern/$1/g; 透過 qr 操作子可把 pattern 存起來,在呼叫的時候就不會有樣式編譯的問題 ( 請參閱 Programming Perl 樣式比對章節 ) 或參閱 Perldoc http://perldoc.perl.org/perlretut.html http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators http://perldoc.perl.org/perlop.html#qr%2fSTRING%2fimosx ※ 引述《dreamer.bbs@snow.ice.ntnu.edu.tw ( )》之銘言: : 小弟剛接觸 perl,有點問題想麻煩各位先進幫忙解答一下: : 我知道在 perl 中可以用 s/pattern/replacement/ 來取代字串, : 若原始字串是 "a/bcde/f", 若在程式碼中以 s/^a\/(.*)/c\1d/ 進行取代 : 結果會變成 "cbcde/fd" : 但是若我想把 pattern 跟 replacement 放在變數裡, : 比方說 : $pat = "^a\/(.*)"; : $rep = "c\1d"; : 然後以 s/$pat/$rep/ 來進行取代的操作, : 結果會得到 "c\1d" : 因為我需要由檔案中將 pattern 與 replacement 的規則讀進來, : 該如何做才能得到與第一種寫法一樣的結果呢? : 希望各位先進能撥空稍微指點一下,感恩! =) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.223.100.79
LiloHuang:他是要後面的字串動態...看清楚 61.230.172.181 09/22 00:09
kornelius:抱歉沒看清楚. :) 61.223.100.79 09/22 00:29
kornelius:那就使用 s/$p/$e/eeg 吧 61.223.100.79 09/22 00:29
LiloHuang:不過用eval的確要小心..尤其input從web 61.230.172.181 09/22 00:30
LiloHuang:eg的方式還是不行的 你自己跑一次吧 61.230.172.181 09/22 00:31
kornelius:是 eeg , 我跑過了 :) 61.223.100.79 09/22 00:31
LiloHuang:能否貼一份code 來看看 61.230.172.181 09/22 00:35
LiloHuang:我總覺得有地方不對勁 61.230.172.181 09/22 00:36
LiloHuang:double eval 用法應該不能達到這個效果 61.230.172.181 09/22 00:39
kornelius:的確,不過如果只是單純要取代為 $1 就可 61.223.100.79 09/22 01:08
LiloHuang:嗯嗯^^" 61.230.172.181 09/22 01:13