Pergunta

Como faço para definir% ENV do Perl para introduzir um script Perl no contexto do meu aplicativo web?

Eu tenho um site, escrito em uma linguagem diferente do Perl (Python). No entanto eu preciso usar uma aplicação Perl, que consiste em um arquivo .pl:

    #!/usr/bin/env perl
    "$ENV{DOCUMENT_ROOT}/foo/bar.pm" =~ /^(.+)$/;
    require $1;
    my $BAR = new BAR(
        user    => 'foo',
    );
    print $bar->get_content;

... e um bar.pm módulo, que se baseia em "$ENV{HTTP_HOST}", "$ENV{REQUEST_URI}", "$ENV{REMOTE_ADDR}" e "$ENV{DOCUMENT_ROOT}".

Como devo definir esse hash? Esta é a minha primeira experiência com Perl, então eu pode estar faltando algo realmente óbvio aqui:)

Foi útil?

Solução

Se você está gerando esse processo Perl do seu código Python (em oposição a "directamente a partir do servidor web"), existem várias maneiras de configurar o ambiente de processo filho a partir do ambiente do processo pai Python, dependendo do que você está usando para a "desova".

Por exemplo, se você estiver usando subprocess.Popen, você pode passar um conjunto argumento env= ao dicionário que você deseja, como o docs explicar:

Se env não é None, ele deve ser um mapeamento que define o ambiente variáveis ??para o novo processo; estes são usados ??em vez de herdar o processo atual ambiente, que é o comportamento padrão.

Outras dicas

de hash especial %ENV do Perl é a interface para o meio ambiente. (Sob o capô, ele chama getenv e putenv conforme o caso.)

Por exemplo:

$ cat run.sh 
#! /bin/bash

export REMOTE_ADDR=127.0.0.1

perl -le 'print $ENV{REMOTE_ADDR}'

$ ./run.sh 
127.0.0.1

O seu servidor web deve ser a definição dessas variáveis ??de ambiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top