ຄຳສັ່ງ 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 ແຍກຕ່າງຫາກພຽງເພື່ອຈະຖືກສືບທອດ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ