我是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;
行怎么样?我认为这是一种替代,但似乎有一种奇怪的形式。
答案 0 :(得分:2)
$val =~ s|\n|\\n|g;
行将\n
的每次出现替换为\\n
。
更准确地说,它用一个代表新行的公共转义序列替换每一个新行。
但为什么?
存在着纯粹猜测的土地。内容类型为text/plain
,因此没有明显的理由这样做。
$val =~ s|"|\\"|g;
行?我认为这是一种替代,但似乎有一种奇怪的形式。
它在许多上下文中使用表示"
的转义序列替换"
(但不是纯文本)。同样,没有明显的理由从它所呈现的背景中去做。
冒险猜测。看起来它的目的是将服务器的环境转储到一个文本文件中,从中可以复制/粘贴它以便在其他地方使用。
答案 1 :(得分:0)
看起来它正在尝试逃避某些其他级别的评估。即其他东西需要查看\n
,但其他内容不会将\
视为文字\
,因此需要先将其转义\\
。同样适用于"
。其他东西需要它作为文字进行转义,即\"
,它首先需要确保\
通过\
保留为文字\\
。
答案 2 :(得分:0)
您对第一次替换的解释是正确的。第二个替换类似:它将"
的每次出现替换为\"
。