ເຊລລູກບໍ່ສາມາດສົ່ງອອກພຣອກຊີກັບຄືນສູ່ Perl ໄດ້
ຕັ້ງ ENV ຂອງ Perl ໂດຍກົງ ແລະ ຈຳກັດຕົວແປພຣອກຊີດ້ວຍ local ອ້ອມການເອີ້ນລູກໜຶ່ງຄັ້ງ ເພື່ອໃຫ້ຄ່າເດີມກັບຄືນມາຫຼັງຈາກນັ້ນ.
ຄຳສັ່ງ backtick ທີ່ມີ export ປ່ຽນພຽງແຕ່ເຊລທີ່ສ້າງຂຶ້ນສຳລັບຄຳສັ່ງນັ້ນ. ເມື່ອເຊລອອກໄປ, ຂະບວນການ Perl ຫຼັກຍັງມີສະພາບແວດລ້ອມເດີມຂອງມັນ.
ຈົ່ງຕັ້ງ hash ສະພາບແວດລ້ອມຂອງ 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;
}
ລູກໄດ້ຮັບຄ່າທີ່ຖືກ local ເປັນມໍລະດົກ. ສຳລັບການດາວໂຫລດ HTTP ສາທາລະນະ, ຈຸດປາຍທາງຈາກ ບັນຊີພຣອກຊີ HTTP ສາມາດໃຫ້ຄ່າ URL ເຫຼົ່ານັ້ນ. ເມື່ອບລັອກສິ້ນສຸດ, Perl ຈະຄືນຄ່າລາຍການເດີມ, ລວມທັງການທີ່ບໍ່ມີມັນມາກ່ອນ. ຜົນຂອງ system ທີ່ສະແດງແມ່ນສະຖານະຂະບວນການຂອງ Perl, ບໍ່ແມ່ນລະຫັດຕອບສະໜອງ HTTP ທີ່ຖອດລະຫັດແລ້ວ.
local ມີຂອບເຂດແບບເຄື່ອນໄຫວ: ໂຄ້ດ Perl ອື່ນທີ່ຖືກເອີ້ນພາຍໃນບລັອກນັ້ນກໍເຫັນສະພາບແວດລ້ອມຊົ່ວຄາວ. ມັນບໍ່ແມ່ນບ່ອນເກັບຂໍ້ມູນລັບສະເພາະຟັງຊັນ.
ກວດເບິ່ງຕົວແປຕົວພິມໃຫຍ່ ແລະ ຕົວແປຂ້າມທີ່ສືບທອດມາສຳລັບໄຄເອັນທີ່ເລືອກ. ຕົວດາວໂຫລດເປັນຜູ້ຕັດສິນວ່າຈະໃຊ້ຂໍ້ມູນນຳເຂົ້າໃດ. ການຕັ້ງພຣອກຊີກໍບໍ່ປ່ຽນຕົວຕົນຜູ້ໃຊ້ຂອງຂະບວນການ ແລະ ບໍ່ຕ້ອງການເຊລ root ແຍກຕ່າງຫາກພຽງເພື່ອຈະຖືກສືບທອດ.