Tôi đang tìm một người nào đó để xác nhận một cách chính đáng hoặc sửa những gì tôi nghĩ rằng tôi biết về tùy chọn -CSDA
trên dòng shebang của một tập lệnh Perl.Điều gì là tốt -CSDA chỉ được chỉ định trên dòng shebang?
Xem perldoc perlrun cho tài liệu của -CSDA
. Tóm lại
- S:
STDIN
,STDOUT
vàSTDERR
được giả định là UTF-8- D: UTF-8 là lớp PerlIO mặc định cho cả đầu vào và đầu ra suối
- A: @ARGV yếu tố này được dự kiến sẽ được chuỗi UTF-8
Đối với
-CSDA
để có hiệu lực, nó phải được xác định trên dòng lệnh như trongperl -CSDA script.pl
.Trước 5.10,
-CSDA
trên dòng công việc âm thầm sẽ thất bại vì các dòng tiêu chuẩn sẽ đã được mở ra và@ARGV
sẵn có ở đó vào thời điểm nó đã gặp phải trừ-CSDA
đã được chỉ định trên dòng lệnh là tốt.Sau 5,10,
-CSDA
chỉ xuất hiện trên dòng shebang gây raperl
để bẻ cong do sự cố đó.Một kịch bản với
-CSDA
được sử dụng để làm việc vớiperl
s trước 5.10 nên có-CSDA
lấy ra từ dòng công việc bởi vì nó không bao giờ được gọi với những tùy chọn trên dòng lệnh (và các tùy chọn, nếu được chỉ định chỉ duy nhất trên shebang line, không làm gì cả).
Tôi rất muốn nhận được một số phản hồi chắc chắn về các giả định của tôi ở trên là sai.
+1. Đối với mục cuối cùng, trên các hệ thống mà '/ usr/bin/perl' không phải là trình thông dịch nhưng là một chương trình quyết định phiên bản' perl' cần gọi (như trên hệ điều hành OS X, nơi '5.8' và' 5.10' cùng tồn tại), '-CSDA' trên dòng shebang làm cho' perl' bị xáo trộn khi nó được gọi. –
Đó là sự thật, nó sẽ là một lỗi trong kịch bản trình bao bọc. Nhưng khi tôi kiểm tra nó trên máy Mac, tôi thấy rằng vấn đề thực sự là 5.10.0 (đi kèm với OS X 10.6.6) không cho phép -C luôn luôn, trong khi 5.10.1 (đó là những gì tôi có trên máy Linux của tôi) cho phép nó nếu các cờ được chỉ định đã hoạt động. Chỉ định perl5.8.9 trên shebang không tôn trọng -CSDA chính xác. – Anomie
Cảm ơn bạn đã làm rõ. Nhiều đánh giá cao. –