Команда с обратными кавычками, содержащая export, меняет только оболочку, созданную для этой команды. Когда оболочка завершается, родительский процесс Perl по-прежнему сохраняет прежнее окружение.

Вместо этого задайте хеш окружения Perl. local позволяет удержать изменение в пределах одного блока:

{
    local $ENV{http_proxy} = 'http://proxy.example:8080';
    local $ENV{https_proxy} = 'http://proxy.example:8080';

    my $status = system {
        '/usr/bin/curl'
    } '/usr/bin/curl', '--fail', '--max-time', '30',
      'https://downloads.example/data.csv';

    die "Downloader failed: $status" if $status != 0;
}

Дочерний процесс наследует локализованные значения. Для публичной HTTP-загрузки конечная точка из списка HTTP-прокси может предоставить эти значения URL. Когда блок заканчивается, Perl восстанавливает прежние записи, включая их прежнее отсутствие. Показанный результат system — это состояние процесса Perl, а не декодированный код ответа HTTP.

local имеет динамическую область видимости: другой код Perl, вызванный внутри этого блока, тоже видит временное окружение. Это не приватное хранилище учётных данных для каждой функции.

Проверьте унаследованные переменные в верхнем регистре и переменные обхода для выбранного клиента. Какие входные данные использовать, решает загрузчик. Настройка прокси также не меняет идентичность пользователя процесса и не требует отдельной root-оболочки только ради наследования.

Похожие статьи