Theo mặc định, in perl \ r \ n trong môi trường win32. Làm thế nào tôi có thể ghi đè lên điều này? Tôi đang sử dụng perl để thực hiện một số thay đổi đối với một số mã nguồn trong một kho lưu trữ, và tôi không muốn thay đổi tất cả các ký tự dòng mới.Làm thế nào tôi có thể in chỉ một dòng mới unix trong Perl trên Win32?
Tôi đã thử thay đổi dấu phân tách bản ghi đầu ra nhưng không có may mắn.
Cảm ơn!
Edit: Wanted để bao gồm một mẫu mã - Tôi đang làm một tìm kiếm và thay thế trong một số tác phẩm mà theo một mô hình tương đối đơn giản như thế này:
#!/usr/bin/perl
# test.pl
use strict;
use warnings;
$/ = undef;
$\ = "\n";
$^I=".old~";
while (<>) {
while (s/hello/world/) {
}
print;
}
này nên thay thế bất kỳ trường hợp của "hello "với" thế giới "cho bất kỳ tệp nào được truyền trên dòng cmd.
Chỉnh sửa 2: Tôi đã thử các binmode
như đề xuất mà không cần bất kỳ may mắn ban đầu. Tôi đã nghiên cứu thêm một chút và thấy rằng $^I
(biến đặc biệt chỉnh sửa tại chỗ) đã ghi đè binmode
. Bất kỳ công việc xung quanh để vẫn có thể sử dụng chỉnh sửa tại chỗ?
Sửa 3: Như Sinan chỉ ra dưới đây, tôi cần thiết để sử dụng binmode ARGVOUT
với $^I
thay vì binmode STDOUT
trong ví dụ của tôi. Cảm ơn.
Nếu bạn thay đổi dấu phân tách bản ghi đầu ra, thì đó là điều duy nhất bạn có thể làm. Tôi đoán bạn đã phạm phải một số sai lầm khác (như không thực sự tách các dòng vào một cách chính xác, hoặc không chomping chúng). –
Bạn có thể đưa ra ví dụ về một số mã in '\ r \ n' khi bạn không muốn? – Ether
@ Sinan, tại sao bạn cho rằng tôi không sẵn sàng ?? Tôi không muốn. Tôi không có một kịch bản ngắn tiện dụng. Tôi có một kịch bản rất dài, phức tạp mà có lẽ sẽ không có ý nghĩa gì nhiều và thậm chí còn khó hiểu hơn nữa. Tôi có thể làm một phiên bản viết tắt sau tối nay. Tôi nghĩ rằng tôi đã bao gồm các bộ phận có liên quan. Tôi không biết tại chỗ chỉnh sửa có liên quan tại thời điểm đó. Cám ơn. –