پوسته فرزند نمیتواند پروکسی را به Perl بازگرداند
ENV را مستقیماً در Perl تنظیم کنید و متغیرهای پروکسی را با local پیرامون یک فراخوانی فرزند محدود کنید تا مقادیر اصلی بعداً بازگردند.
یک فرمان backtick که export دارد فقط پوستهای را که برای همان فرمان ساخته شده تغییر میدهد. وقتی پوسته خارج شود، فرایند والد Perl همچنان محیط پیشین خود را دارد.
بهجای آن هش محیط Perl را تنظیم کنید. 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 میتواند آن مقادیر URL را تأمین کند. وقتی بلوک پایان یابد، Perl ورودیهای پیشین را بازمیگرداند، از جمله نبود پیشین آنها. نتیجه system که نمایش داده میشود وضعیت فرایند Perl است، نه کد پاسخ HTTP رمزگشاییشده.
local دامنه پویا دارد: کد Perl دیگری که درون آن بلوک فراخوانی شود نیز محیط موقت را میبیند. این یک انبار خصوصی اعتبارنامه برای هر تابع نیست.
برای کلاینت انتخابشده متغیرهای ارثی حروف بزرگ و متغیرهای عبور را بررسی کنید. دانلودکننده تصمیم میگیرد کدام ورودیها را مصرف کند. تنظیم پروکسی نیز هویت کاربر فرایند را تغییر نمیدهد و برای صرفاً به ارث رسیدن به پوسته root جداگانه نیاز ندارد.