2013-01-23 91 views
0

我是一個新手,Perl和我發現這個測試CGI腳本在我的Apache安裝和我想知道那是什麼,尤其是在兩個s///線之一。小號///和正則表達式在Perl

#!/usr/bin/perl 

print "Content-type: text/plain; charset=iso-8859-1\n\n"; 
foreach $var (sort(keys(%ENV))) { 
    $val = $ENV{$var}; 
    $val =~ s|\n|\\n|g; 
    $val =~ s|"|\\"|g; 
    print "${var}=\"${val}\"\n"; 
} 

$val =~ s|\n|\\n|g;線替換\\n\n每次發生。但爲什麼?

並且怎麼樣$val =~ s|"|\\"|g;線?我認爲這是一個替代,但它似乎有一個奇怪的形式。

+0

哦,不要被'|'而不是'/' - perl可以讓你這麼做......(主要是因爲在使用html的時候,最好不要經常轉義'/') –

回答

2

$val =~ s|\n|\\n|g;行將\n替換爲\\n的每次出現。

更準確地說,它用代表新行的常用轉義序列替換每個新行。

但是,爲什麼?

裏面就包含了純投機的土地。內容類型是text/plain,所以沒有明顯的理由去做。

$val =~ s|"|\\"|g; line?我認爲這是一個替代,但它似乎有一個奇怪的形式。

它取代"與代表在許多情況下(但不是純文本)一"轉義序列。同樣,沒有明顯的理由將它介紹的背景下做到這一點。


妄自猜測。它看起來像是將服務器環境轉儲到一個文本文件,從中可以複製/粘貼到其他地方。

+0

「它看起來像是用來將服務器的環境轉儲到文本文件可以被複制/粘貼到別處使用。「是。這就是我在回答中得到的結果,當我說「看起來它試圖逃避某些其他評估級別的東西」時,但這種方式更加清晰。 – DWright

+0

我認爲'「| \\」'是一個被解釋的字符串。也許我被我的文本編輯器的着色誤導了。 – JustTrying

0

看起來它試圖逃避某些其他級別的評估。即別的東西是要需要看\n,但別的就不會看到一個\作爲文字\,所以它需要它逃過第一,\\"也是如此。有些東西需要它轉義爲文字,即\",它首先需要確保\通過\\保存爲一個文字\

0

您對第一次替換的解釋是正確的。第二個替換類似:它將"的每次出現替換爲\"