Sự khác biệt là bạn đang viết đến hai biệt và (từ Perl và điểm của chương trình của bạn) độc lập xử lý tập tin.
Người đầu tiên là một xử lý tập tin mở vào một tập tin "thiết bị" đặc biệt trên Unixy OS đó là "một từ đồng nghĩa với các thiết bị đầu cuối kiểm soát của một quá trình, nếu có" (trích dẫn từ this Linux document). Xin lưu ý rằng mặc dù nó thường được coi là "màn hình" nhưng không nhất thiết phải là (ví dụ: thiết bị đầu cuối đó có thể được liên kết với tệp thiết bị của cổng nối tiếp); và nó có thể không tồn tại hoặc không thể mở được.
Tệp thứ hai là tệp được xử lý được liên kết theo mặc định với bộ mô tả tệp # 1 cho quy trình.
Họ có thể dường như giống hệt nhau ở cái nhìn đầu tiên do thực tế rằng, trong một tình huống điển hình, một vỏ Unix sẽ theo mặc định liên kết tập tin của nó mô tả # 1 (và do đó một trong mỗi quá trình nó sẽ khởi động không có chuyển hướng) với /dev/tty
.
Cả hai không có điểm chung từ quan điểm Perl, KHÁC so với thực tế là hai kết quả này thường được kết hợp theo mặc định do cách trình vỏ Unix hoạt động.
Hành vi chức năng của hai đoạn mã được trích dẫn thường SEEM giống hệt nhau do mặc định này, nhưng đó chỉ là "do tình cờ".
Trong số chênh lệch thực tế:
/dev/tty
không nhất thiết phải tồn tại trên phi Unixy OS. Do đó, rất dễ sử dụng để sử dụng tty. Tương đương Windows là CON:
IIRC.
STDOUT
của một chương trình có thể được liên kết (được chuyển hướng lại) cho bất kỳ ai được gọi là chương trình. Có thể được liên kết với một tệp, có thể là một đường dẫn đến STDIN của một quy trình khác.
Bạn có thể kiểm tra xem STDOUT của bạn được kết nối với một tty bằng -t
operator:
if (-t STDOUT) { say 'STDOUT is connected to a tty' }
Như sang một bên khác, xin vui lòng lưu ý rằng bạn có thể chắc chắn rằng STDOUT bạn ghi vào /dev/tty
bằng cách đóng một cách thủ công tệp STDOUT và mở lại nó để trỏ đến /dev/tty
:
close STDOUT or die $!;
open STDOUT '>:encoding(utf8)', '/dev/tty' or die $!;
Một trong số chúng ghi vào/dev/tty, một trong số chúng ghi vào STDOUT. Đó có phải là điều bạn muốn biết không? –
@JB - nó không phải là một sự khác biệt tầm thường đối với những người không quen thuộc với Unix – DVK
@DVK Bạn nói đúng. Tôi đã bị nhầm lẫn bởi định hướng Perl của câu hỏi khi ý chính của nó là Unix. Cảm ơn sự khai sáng! –