export պարունակող backtick հրամանը փոխում է միայն այդ հրամանի համար ստեղծված shell-ը։ Երբ shell-ը դուրս գա, ծնող Perl պրոցեսը դեռ ունի իր նախորդ միջավայրը։

Փոխարենը սահմանեք Perl-ի միջավայրի hash-ը։ 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 proxy ցանկից վերջնակետը կարող է տրամադրել այդ URL արժեքները։ Երբ բլոկն ավարտվի, Perl-ը վերականգնում է նախորդ գրառումները, ներառյալ դրանց նախկին բացակայությունը։ Ցուցադրվող system արդյունքը Perl-ի պրոցեսի կարգավիճակն է, ոչ թե վերծանված HTTP պատասխանի կոդ։

local-ը դինամիկ շրջանակ ունի․ այդ բլոկի ներսում կանչված այլ Perl կոդ նույնպես տեսնում է ժամանակավոր միջավայրը։ Սա ֆունկցիայով մասնավոր հավատարմագրերի պահոց չէ։

Ստուգեք ընտրված կլիենտի ժառանգված մեծատառ և bypass փոփոխականները։ Թե որ մուտքերն օգտագործել, որոշում է ներբեռնիչը։ Proxy կարգավորումը նույնպես չի փոխում պրոցեսի օգտատիրոջ ինքնությունը և չի պահանջում առանձին root shell միայն ժառանգվելու համար։

Առնչվող հոդվածներ