2017-04-03 157 views
3

我想解析一個Perl腳本到Python。我幾乎沒有使用Perl的經驗,但仍然令人驚訝地順利。 Perl文檔非常廣泛而且令人印象深刻。然而,有時候會有一些非常神祕的語法,我真的無法弄清楚,我也沒有和腳本的作者進行交流。下面給了我頭疼,現在相當長的一段時間:這個Perl語句是什麼意思?

sub someSubroutine 
{ 
    my ($var1, $var2, $var3) = @_; 

    # some Perl code 

    $var2 =~ s|/|\\|g; 

    # and then some more code .. 
} 

我真的不明白這一個特別的孤獨線

$dst =~ s|/|\\|g; 

我清楚,這使得搜索/串 - 與$var2相匹配的一些二進制OR操作,但結果不存儲。

我不知道它是否有任何不明顯的副作用,例如它是否自動存儲在$_

從我讀過的內容可以看出,默認變量是在調用子程序,啓動循環或類似的時候自動設置的,但是什麼時候使用操作符。

我真的很感謝任何幫助或指向適當的文件。

回答

8

$var2 =~ s|/|\\|g; 

s/pattern/replacement/substitution operator

搜索字符串的模式,如果找到,替換模式 與替換文本,並返回替換的數量 製造。否則它返回false(特別是空字符串)。

|不是 「二進制或」 - 這是一個分隔符。在s中,您可以使用任何分隔符,尤其是爲了便於閱讀。

perlopRegexp Quote-Like Operators

任何非空白分隔符可以替換斜線。在使用標識符允許的字符時,在 之後添加空格。如果使用單引號 ,則不會對替換字符串進行解釋(但是/ e 修飾符會覆蓋此字段)。請注意,Perl將反引號視爲 正常分隔符;替換文本不作爲命令評估。 如果PATTERN由包圍引號定界,則替換爲 它自己的一對引號,例如 示例,s(foo)(bar)或s/bar /可能包含或不包含引號。

上述替換每/與所述$var2\。 (\是轉義字符,因此您需要使用\\)。

my $v='/a/b/c'; 
$v =~ s|/|\\|g; 
print "$v\n"; 
# \a\b\c 

此外,

如果通過=〜或者沒有指定字符串!〜操作符,$ _變量 搜索和修改。

$_ = $v;  # assign the $_ 
s{\\}{/}g; # substitution on the $_ using bracketed delimiters 
print;  # without args prints the $_ 
# /a/b/c 
+0

謝謝。考慮我在閱讀Perl文檔的所有時間,這讓我感到很尷尬,我無法弄清楚自己。考慮到*幫助中心>請求*文章,我現在有點不確定是否應該刪除這個問題,畢竟這只是無關緊要的語法。 – magnus

+2

@Magnus,無需刪除。 – ikegami