如何设置Perl的%ENV以将Perl脚本引入我的Web应用程序的上下文中?
我有一个网站,用不同于Perl(Python)的语言编写。但是我需要使用一个Perl应用程序,它包含一个.pl文件:
#!/usr/bin/env perl
"$ENV{DOCUMENT_ROOT}/foo/bar.pm" =~ /^(.+)$/;
require $1;
my $BAR = new BAR(
user => 'foo',
);
print $bar->get_content;
...还有一个模块bar.pm,它依赖于"$ENV{HTTP_HOST}"
,"$ENV{REQUEST_URI}"
,
"$ENV{REMOTE_ADDR}"
和"$ENV{DOCUMENT_ROOT}"
。
我应该如何设置此哈希?这是我第一次体验Perl,所以我可能会遗漏一些非常明显的东西:)
答案 0 :(得分:4)
如果您从Python代码中生成Perl进程(而不是“直接来自Web服务器”),有几种方法可以从Python父进程环境设置子进程环境,具体取决于您是什么用于“产卵”。
例如,如果您使用subprocess.Popen
,则可以将env=
参数集传递给所需的字典,docs解释:
如果env不是None,则必须是a 定义环境的映射 新过程的变量;这些 用来代替继承 当前流程的环境,即 默认行为。
答案 1 :(得分:2)
Perl的特殊%ENV
哈希是环境的接口。 (在引擎盖下,它会根据需要调用getenv
和putenv
。)
例如:
$ cat run.sh
#! /bin/bash
export REMOTE_ADDR=127.0.0.1
perl -le 'print $ENV{REMOTE_ADDR}'
$ ./run.sh
127.0.0.1
您的网络服务器应该设置这些环境变量。