0

我是 Perl 的新手,我在我的 Apache 安装中找到了这个测试 CGI 脚本,我想知道它的作用,尤其是在这两s///行之一中。

#!/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

更准确地说,它用代表新行的通用转义序列替换每个新行。

但为什么?

那里是纯粹投机的土地。内容类型是text/plain所以没有明显的理由这样做。

$val =~ s|"|\\"|g;线?我认为这是一种替代,但它似乎有一种奇怪的形式。

它替换为在许多上下文中"表示 a 的转义序列"(但不是纯文本)。同样,从它所呈现的上下文来看,没有明显的理由这样做。


冒险猜测。看起来它旨在将服务器的环境转储到文本文件中,可以从中复制/粘贴以在其他地方使用。

于 2013-01-23T16:37:50.587 回答
0

看起来它正试图逃避一些其他级别的评估。即其他东西将需要看到\n,但其他东西不会将其\视为文字\,因此它需要先将其转义,\\. 对于". 其他东西需要将其作为文字转义,即 , \"并且它首先需要确保将\保留为文字\via \\

于 2013-01-23T16:36:29.333 回答
0

您对第一个替换的解释是正确的。第二个替换类似:它将每次出现的替换"\"

于 2013-01-23T16:37:31.413 回答