Команда з backtick, що містить 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-оболонки лише для успадкування.

Схожі статті