ตัวแปรสภาพแวดล้อมเหล่านั้นควรถูกล่ามโซ่ที่คุณพูดดังนั้น
$ENV{ $ENV{a} };
หมายเหตุ: ไม่ใช่$aแต่aเช่น$ENV{USER}อื่น ๆ สิ่งนี้ใช้แฮช%ENV(ดูperlvar ) ซึ่งมีสภาพแวดล้อมปัจจุบันดังนั้นด้วยคีย์เป็นชื่อของตัวแปรสภาพแวดล้อม
เห็นได้ชัดว่าน่าสนใจที่จะใช้ตัวแปร Perl (สำหรับชื่อตัวแปรเชลล์† ) ใน%ENVไม่ใช่สตริงลิเทอรัลดังที่กล่าวมา ในกรณีนี้เราจำเป็นต้องส่งตัวแปรเชลล์ชื่อหรือค่าไปยังโปรแกรม Perl เพื่อเก็บไว้ในตัวแปร ไม่สามารถใช้โดยตรง
อนึ่งหนึ่งในวิธีในการส่งตัวแปรจากเชลล์ไปยัง Perl คือการส่งออกอย่างแม่นยำสิ่งที่ทำให้พร้อมใช้งานผ่าน%ENV. อย่างไรก็ตามสามารถส่งผ่านได้ตามปกติผ่านบรรทัดคำสั่ง สมมติว่าใช้ Perl one-liner (โดยทั่วไปในเชลล์สคริปต์) เรามีสองตัวเลือกในการส่งผ่าน
เป็นอาร์กิวเมนต์perl -we'...' "$var"ซึ่งในกรณีนี้มีอยู่ใน@ARGV
ผ่านทาง-sคำสั่งสลับ , perl -s -we'...' -- -shv="$var"เป็นสิ่งที่กำหนดขึ้นตัวแปรในซับหนึ่งที่มีค่า$shv จุดเริ่มต้นของการขัดแย้ง$var--
ดูโพสต์นี้เพื่อดูรายละเอียดและอาจเป็นอีกเรื่องหนึ่งที่เกี่ยวข้องมากกว่าเช่น
หมายเหตุ ข้อคิดเห็นถามถึงวิธีการส่งชื่อตัวแปร(สตริงa) ไม่ใช่ค่า ( $a) นี่ดูไม่เป็นการออกแบบที่ดีที่สุดสำหรับฉัน ถ้าชื่อของตัวแปรด้วยเหตุผลบางอย่างที่จำเป็นต้องผ่านรอบแล้วมันทำให้รู้สึกในการจัดเก็บที่ในตัวแปร ( var="a") และส่งผ่านตัวแปรที่ดังกล่าวข้างต้น
แต่ถ้าความคิดคือการส่งชื่อตัวเองไปรอบ ๆ ให้ทำอย่างนั้นแทนดังนั้นอย่างใดอย่างหนึ่ง
perl -we'...' "a"
perl -we'...' -s -- -shv="a"
ส่วนที่เหลือจะเหมือนกันและ%ENVใช้ตัวแปรที่กำหนดอินพุต
หากใช้สคริปต์ Perl แบบเต็ม (ไม่ใช่แบบซับเดียว) ให้ใช้Getopt :: Longเพื่อจัดการกับ arugments อย่างดี
† ความคิดเห็นถามเกี่ยวกับการผ่านตัวแปรของเปลือกชื่อให้กับตัวแปร Perl - ดังนั้นaจาก OP $aที่ไม่คุ้มค่า ฉันไม่แน่ใจเล็กน้อยเกี่ยวกับประโยชน์ของสิ่งนี้ แต่เป็นไปได้แน่นอน
สองวิธีในการส่งผ่านตัวแปรจากเชลล์ไปยัง Perl นั้นแตกต่างกันในสิ่งที่ส่งผ่าน