Ett barnskal kan inte exportera en proxy tillbaka till Perl
Ställ in Perls ENV direkt och lokalisera proxyvariabler runt ett enda underordnat anrop så att de ursprungliga värdena återkommer efteråt.
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.