【发布时间】:2022-01-12 21:03:21
【问题描述】:
我一直在寻找通过在 Apache 服务器的 httpd.conf 中使用 perl 替换来将字符串替换为服务器 $ENV[KEY] 的值的方法。到目前为止我的代码:
ExtFilterDefine htmlfilter mode=output intype=text/html cmd="/usr/bin/perl -pe 's|Mountainbike|qq(\") $ENV qq(\")|e'"
sn-p 不起作用。有人知道如何解决吗?我想这与引号有关
|qq(\") $ENV qq(\")|
我还尝试了另一种选择,将我的 perl 代码放入 *.pl 文件中,然后将以下内容放入我的 httpd.conf 文件中:
ExtFilterDefine htmlfilter mode=output intype=text/html cmd="/usr/bin/perl -pe 's|Mountainbike|perl env_check.pl|e'"
这按我的预期工作,完全没问题。但是在上面的第一个班轮示例中我该怎么做呢?
【问题讨论】:
-
"perl -pe 's|Mountainbike|qq(\") $ENV qq(\")|e" 你的意思是从@访问
$ENV{KEY}Perl 中的 987654327@ 哈希?试试perl -pe 's|Mountainbike|qq(\") . $ENV{KEY} . qq(\")|e" -
是的,我的意思是
%ENV哈希。很好的建议。谢谢它的工作原理:-)。关于它的另一个问题。是否可以在上面评论中的 sn-p 的一个衬里内制作if statement?仅当$ENV{KEY} = "blue"时,我才想运行我的过滤器(将字符串 A 替换为字符串 B)。也许像这样:perl -pe 's|Mountainbike|blue|e if$==eof & $ENV{KEY} = "blue""。使用e if$==eof,我只能在文件末尾添加替换。 -
perl -0777pe's/Mountainbike$/blue/ if $ENV{KEY} eq q{blue}'-0777导致整个文件被视为一行。$匹配行尾或行尾 LF 之前。 -
不幸的是,
if statement不起作用。我的问题可能是什么?引用或缺少e?perl -0777pe 's/Mountainbike$/E-Bike/e if $ENV{KEY} eq q{blue}'。q{blue}呢。这是对的还是你的意思是qq(\") . {blue} . qq(\")? -
我发布的内容有效。使用
printf 'Mountainbike\nMountainbike\n' | perl ...非常容易证明。 ///e是错误的。E-Bike不是有效的 Perl 代码。s{...}{...}是s{...}{ qq{...} }e的缩写 ///qq(\") . {blue} . qq(\")没有意义。q{blue}与'blue'相同(我真的是q'blue'的缩写)。通过使用q{}而不是''或"",我避免了冲突。
标签: perl environment-variables