ฉันใช้ Kubuntu 20.04 เวอร์ชัน perl แสดงโดย perl -v เป็น
perl 5 เวอร์ชัน 30 เวอร์ชันย่อย 0 (v5.30.0) สร้างขึ้นสำหรับ x86_64-linux-gnu-thread-multi (พร้อมแพตช์ที่ลงทะเบียน 50 รายการ ดูที่ perl -V
ฉันเพิ่งทำการอัพเดต apt-get และด้วยตัวจัดการแพ็คเกจ Muon ฉันได้อัปเกรดแพ็คเกจ perl ที่ติดตั้งทั้งหมดแล้ว
แต่หลังจากนั้น perl ก็ 5 เหมือนเดิม ผมไม่มี perl 6
ปัญหาของฉันไม่ใช่เมื่อฉันใช้คำสั่งระบบอย่างง่ายเช่น
perl - เรา 'ระบบ ("echo \"aaa\" > /tmp/WEx_args_file"); '
ในกรณีนี้ ไฟล์ถูกเขียนขึ้น
แต่เมื่อใช้ทางอ้อมวัตถุเช่น
perl -we ' @WE_args = ( "echo", " \"qqq\" > /tmp/WEx_args_file" ); $WE_retcod_system = ระบบ { $WE_args[0] } @WE_args; พิมพ์ "WE_retcod_system: ~", $WE_retcod_system, "~\n"; if($WE_retcod_system != 0) { die "\nsystem >>>YYY>>>@WE_args<<<YYY<<< ล้มเหลว: $?"; }; '
ในกรณีนี้ ไฟล์ไม่ได้ถูกเขียน
เอาต์พุตที่แสดงบนหน้าจอ:
"qqq" > /tmp/WEx_args_file
แล้วตาม
WE_retcode_system: ~0~
ฉันได้ลองใช้วัตถุทางอ้อมในหลายรูปแบบทั้งวัน ฉันไม่พบรหัสที่จะเขียนไฟล์ tmp
ได้โปรด ใครรู้วิธีแก้ปัญหาบ้าง?
=====
ในการพยายามที่จะดำเนินการต่อไปฉันได้พบสิ่งที่ดีมาก
IPC::ระบบ::ง่าย
ด้วยวิธีนี้ ความตั้งใจของฉันคือการแทนที่รหัส backtick ของฉัน
เสียงสะท้อน -n "qqq" | xxd -g1
ด้วยฟังก์ชันแคปเจอร์เอ็กซ์ เช่น
perl -เราใช้ IPC::System::Simple qw/capturex/; open(FHo, ">/tmp/Wex_args_file") หรือตาย; $WE_got_from_cpx = capturex("echo", "-n", ""qqq"", "|", "xxd -g1" ); พิมพ์ FHo "WE_got_from_cpx: ~", $WE_got_from_cpx, "~\n"; '
เท่าที่ฉันเข้าใจ นี่คือการใช้แคปเจอร์เอ็กซ์ที่ถูกต้อง แต่ปัญหาใหม่มันไม่ทำงาน
คำสั่งบน RHS ของท่อ เช่น
xxd -g1
ไม่ได้ดำเนินการ แต่คัดลอกเท่านั้น ผลลัพธ์ที่ได้คือ
WE_got_from_cpx: ~"qqq" | xxd -g1~
ฉันเกรงว่าโมดูลเหล่านี้ใน IPC::System::Simple จะขึ้นอยู่กับจุดนำเช่น "วัตถุทางอ้อม" ซึ่งมีเพียงอาร์กิวเมนต์แรกเท่านั้นที่เป็นคำสั่งที่ดำเนินการ
ฉันจะใช้ IPC::System::Simple เพื่อทำให้ฟังก์ชัน backtick ทั้งหมดไปได้อย่างไร
ความนับถือ
แอนตัน