Как установить Perl% ENV для представления Perl script в контексте моего веб-приложения?
У меня есть веб-сайт, написанный на языке, отличном от 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, поэтому мне может не хватать что-то действительно очевидное здесь:)
Если вы создаете этот процесс Perl из своего кода Python (в отличие от "непосредственно с веб-сервера" ), существует несколько способов установить дочернюю среду процесса из родительской среды Python, в зависимости от того, что вы используя для "нереста".
Например, если вы используете subprocess.Popen
, вы можете передать аргумент env=
в словарь, который вы хотите, так как docs объясните:
Если env не является None, это должно быть сопоставление, определяющее среду переменные для нового процесса; эти используются вместо наследования текущая среда процесса, которая поведение по умолчанию.
Perl special %ENV
hash - это интерфейс к среде. (Под капотом он называет 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
Ваш веб-сервер должен устанавливать эти переменные среды.