Ett backtick-kommando som innehåller export ändrar bara skalet som skapades för just det kommandot. När skalet avslutas har den överordnade Perl-processen fortfarande sin tidigare miljö.

Ställ i stället in Perls miljöhash. local kan hålla ändringen inom ett enda block:

{
    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;
}

Barnet ärver de lokaliserade värdena. För en offentlig HTTP-nedladdning kan en slutpunkt från HTTP-proxylistan leverera dessa URL-värden. När blocket slutar återställer Perl de tidigare posterna, även deras tidigare frånvaro. Den visade system-utskriften är Perls processstatus, inte en avkodad HTTP-svarskod.

local har dynamisk räckvidd: annan Perl-kod som anropas inuti blocket ser också den tillfälliga miljön. Det är inte ett privat inloggningslager per funktion.

Granska ärvda versaler och bypass-variabler för den valda klienten. Nedladdaren avgör vilka indata den använder. En proxyinställning ändrar inte heller processens användaridentitet och kräver inte ett separat root-skal bara för att ärvas.

Relaterade artiklar