2012-05-03 52 views
0

爲不Perl程序員,我想,以確保我已經很好地理解一個結構,我要移植到Python,理解一個簡單的Perl構建

時使用:

if (s/^([$PChar])(.)/$2/) { 
    print $1,"\n"; 
    $finished = 0; 
} 
  • $ 1,$ 2等的匹配正則表達式
  • S /搜索/與/

取代什麼,我真我不確定匹配/替換是在打印$ 1之前完成的嗎?並且它是在當前緩衝區(它是$ F,即$ _逐行逐行,在它的空格字符上分割)內「inplace」完成的,也就是改變它(所以如果我理解的很好,([$ PChar])當一個字符串的@開頭在上面的表述中被完全刪除/丟失時)?

編輯:不,也許它不會丟失,第一個括號部分被捕獲,然後打印爲$ 1 +新行字符,然後...不,不知道什麼變成了$ 2 ...可能是緩衝區更改爲秒括號部分? /編輯結束。

還有什麼環境或什麼是允許在Win平臺上進行一些逐步調試的最佳環境?我知道有這個,我不會問這個問題。我不需要學習Perl,只是爲了能夠閱讀和修改這個腳本。

這裏是englobing部分:

@F = split; 
for($j=0; $j<=$#F; $j++) { 
    my $suffix=""; 
    $_ = $F[$j]; 
    # separate punctuation and parentheses from words 
    do { 
$finished = 1; 
# cut off preceding punctuation 
if (s/^([$PChar])(.)/$2/) { 
    print $1,"\n"; 
    $finished = 0; 
} 
# cut off trailing punctuation 
if (s/(.)([$FChar])$/$1/) { 
    $suffix = "$2\n$suffix"; 
    $finished = 0; 
} 

整個腳本tokenize.pl可以看出here而原來tar.bz如果​​從here

問候

+0

如果你要發佈示例代碼,不要發佈tar.gz文件,將純文本複製並粘貼到一些在線鍵盤上,如codepad.org。 – TLP

+0

@TLP,好的謝謝!直到現在我還不知道codepart.org :) – user1340802

回答

2
# try to delete the first character from the string contained in 
# $_ if that character is one of the characters contained in 
# the string $PChar. The deletion is done by replace the first and 
# second character by only the second character. 
if (s/^([$PChar])(.)/$2/) { 

    # if the replacement was successful, print the deleted character. 
    print $1,"\n"; 
    $finished = 0; 
} 
+0

問題的評論表明$ PChar保存一串標點符號。我沒有看tar,但我們假設'$ PChar ='\。,:;]''。然後'([$ PChar])'會捕獲字符'.',',',':',';'中的一個字符。實現這一點的更簡單的方法是留下第二個括號並說's/^([$ PChar])//'因爲它無論如何都不會觸及下一個字符。 – simbabque

+0

然後processus的其餘部分繼續只有第二個字符開始的字符串作爲我們的新緩衝區$ _?或者我們繼續所有的字符串不變爲$ _? Simbabque:是的,它實際上是標點符號開放標記像開放括號。 – user1340802

+0

@ user1340802:替換是內聯的,意味着$ _'的內容被改變(第一個字符被刪除)。 – codaddict