En backtick-kommando med export ændrer kun den skal, der blev oprettet til netop den kommando. Når skallen afsluttes, har den overordnede Perl-proces stadig sit tidligere miljø.

Sæt i stedet Perls miljøhash. local kan holde ændringen inden for én blok:

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

Det underordnede miljø arver de lokaliserede værdier. Til en offentlig HTTP-download kan et endepunkt fra HTTP-proxylisten levere de URL-værdier. Når blokken slutter, gendanner Perl de tidligere poster, også deres tidligere fravær. Det viste system-resultat er Perls processtatus, ikke en afkodet HTTP-svarkode.

local har dynamisk scope: anden Perl-kode, der kaldes inde i blokken, kan også se det midlertidige miljø. Det er ikke et privat legitimationslager pr. funktion.

Gennemgå nedarvede variabler med store bogstaver og bypass-variabler for den valgte klient. Downloaderen afgør, hvilke input den bruger. En proxyindstilling ændrer heller ikke processens brugeridentitet eller kræver en separat root-skal alene for at blive nedarvet.

Relaterede artikler