คำสั่ง 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;
}

ลูกสืบทอดค่าที่ถูก local ไว้ การดาวน์โหลด HTTP สาธารณะสามารถใช้ปลายทางจากรายการพร็อกซี HTTPเพื่อให้ค่าตัวแปร URL เหล่านั้น เมื่อบล็อกสิ้นสุด Perl จะคืนค่ารายการก่อนหน้า รวมถึงการไม่มีอยู่ก่อนหน้านั้นด้วย ผลลัพธ์ system ที่แสดงคือสถานะกระบวนการของ Perl ไม่ใช่รหัสตอบสนอง HTTP ที่ถอดรหัสแล้ว

local มีขอบเขตแบบไดนามิก: โค้ด Perl อื่นที่ถูกเรียกภายในบล็อกนั้นก็เห็นสภาพแวดล้อมชั่วคราวด้วย ไม่ใช่ที่เก็บข้อมูลรับรองส่วนตัวต่อฟังก์ชัน

ตรวจสอบตัวแปรตัวพิมพ์ใหญ่และตัวแปรข้ามที่สืบทอดมาสำหรับไคลเอนต์ที่เลือก ตัวดาวน์โหลดเป็นผู้ตัดสินว่าจะใช้ข้อมูลใด การตั้งค่าพร็อกซีก็ไม่เปลี่ยนตัวตนผู้ใช้ของกระบวนการ และไม่ต้องใช้เชลล์ root แยกต่างหากเพียงเพื่อให้สืบทอดได้

บทความที่เกี่ยวข้อง