0

私はPerlの初心者であり、ApacheインストールでこのテストCGIスクリプトを見つけました。特に、2s///行のうちの1行でそれが何をするのか知りたいです。

#!/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;ラインはどうですか?代用だと思いますが、形がおかしいようです。

4

3 に答える 3

2

この$val =~ s|\n|\\n|g;行は、出現するすべて\nの文字列を に置き換え\\nます。

より正確には、各改行を、改行を表す一般的なエスケープ シーケンスに置き換えます。

しかし、なぜ?

純粋な投機の地がそこにあります。content-type は でtext/plainあるため、それを行う明確な理由はありません。

$val =~ s|"|\\"|g;ライン?代用だと思いますが、変な形をしているようです。

"これは、多くのコンテキストでa を表すエスケープ シーケンスに置き換えられ"ます (ただし、プレーン テキストではありません)。繰り返しますが、提示されているコンテキストからそれを行う明確な理由はありません。


推測を危険にさらす。サーバーの環境をテキスト ファイルにダンプするように設計されているようで、そこからコピー/貼り付けして他の場所で使用することができます。

于 2013-01-23T16:37:50.587 に答える
0

他のレベルの評価のために何かをエスケープしようとしているようです。\nつまり、他の何かがを参照する必要がありますが、他の何か\は をリテラルとして認識しない\ため、最初にエスケープする必要があります\\。についても同様"です。他の何かは、リテラルとしてエスケープする必要 があり\"ます。\\\\

于 2013-01-23T16:36:29.333 に答える
0

最初の置換についてのあなたの説明は正しいです。2 番目の置換も同様です。出現するたびに を置き換え"ます\"

于 2013-01-23T16:37:31.413 に答える