En backtick-kommando med export endrer bare skallet som ble opprettet for nettopp den kommandoen. Når skallet avsluttes, har den overordnede Perl-prosessen fortsatt sitt tidligere miljø.

Sett i stedet Perls miljøhash. local kan holde endringen innenfor én blokk:

{
    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 arver de lokaliserte verdiene. For en offentlig HTTP-nedlasting kan et endepunkt fra HTTP-proxylisten levere disse URL-verdiene. Når blokken slutter, gjenoppretter Perl de tidligere oppføringene, også deres tidligere fravær. Den viste system-utskriften er Perls prosessstatus, ikke en dekodet HTTP-svarkode.

local har dynamisk omfang: annen Perl-kode som kalles inni blokken, ser også det midlertidige miljøet. Det er ikke et privat påloggingslager per funksjon.

Gå gjennom arvede store bokstaver og bypass-variabler for den valgte klienten. Nedlasteren avgjør hvilke inndata den bruker. En proxyinnstilling endrer heller ikke prosessens brukeridentitet og krever ikke et eget root-skall bare for å bli arvet.

Relaterte artikler