Tôi đang chạy Kubfox 20.04. Phiên bản perl được hiển thị bởi perl -v là
perl 5, phiên bản 30, subversion 0 (v5.30.0) được xây dựng cho x86_64-linux-gnu-thread-multi (với 50 bản vá đã đăng ký, xem perl -V
Tôi vừa thực hiện cập nhật apt-get và với trình quản lý gói Muon, tôi đã nâng cấp tất cả các gói perl đã cài đặt.
Nhưng sau đó perl vẫn là 5 như trước, mình không có perl 6.
Vấn đề của tôi không phải là khi tôi sử dụng lệnh hệ thống đơn giản như
perl -we 'system("echo \"aaa\" > /tmp/WEx_args_file"); '
Trong trường hợp này, tệp được ghi.
Nhưng khi sử dụng cách đối tượng gián tiếp, như
perl -we ' @WE_args = ( "echo", " \"qqq\" > /tmp/WEx_args_file" ); $WE_retcod_system = hệ thống { $WE_args[0] } @WE_args; in "WE_retcod_system: ~", $WE_retcod_system, "~\n"; if($WE_retcod_system != 0) { die "\nsystem >>>YYY>>>@WE_args<<<YYY<<< fail: $?"; }; '
trong trường hợp này, tệp không được ghi.
Đầu ra được hiển thị trên màn hình:
"qqq"> /tmp/WEx_args_file
sau đó làm theo
WE_retcode_system: ~0~
Tôi đã thử cách đối tượng gián tiếp trong nhiều biến thể trong cả ngày. Tôi chưa tìm thấy mã tệp tmp sẽ được ghi.
Xin vui lòng, có ai biết một giải pháp?
=====
Khi cố gắng tiếp tục, tôi đã tìm thấy điều rất tốt
IPC::Hệ thống::Đơn giản
Bằng cách này, ý định của tôi là thay thế mã backtick của tôi
tiếng vang -n "qqq" | xxd -g1
với chức năng capturex, như
perl -we ' sử dụng IPC::System::Simple qw/capturex/; open(FHo, ">/tmp/Wex_args_file") hoặc chết; $WE_got_from_cpx = captx("echo", "-n", ""qqq"", "|", "xxd -g1" ); in FHo "WE_got_from_cpx: ~", $WE_got_from_cpx, "~\n"; '
Theo như tôi hiểu, đây là cách sử dụng chính xác của Capturex. Nhưng vấn đề mới, nó không hoạt động.
Lệnh trên RHS của đường ống, tức là
xxd -g1
không được thực hiện mà chỉ được sao chép. Kết quả là
WE_got_from_cpx: ~"qqq" | xxd -g1~
Tôi e rằng các mô-đun này trong IPC::System::Simple dựa trên điểm dẫn đầu giống như cách "đối tượng gián tiếp" mà chỉ đối số đầu tiên là lệnh được thực thi.
Làm cách nào tôi có thể sử dụng IPC::System::Simple để thực hiện toàn bộ chức năng backtick?
Trân trọng
trái dấu