Trích dẫn từ Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin
Tại sao tôi nên sử dụng <ARGV> hoặc <> thay vì <STDIN> trong Perl?
Perl có một filehandle ma thuật hữu ích được gọi * argv để kiểm tra dòng lệnh và nếu có bất kỳ đối số, mở ra và đọc những người như tập tin. Nếu không có đối số, * ARGV hoạt động như * STDIN thay thế. Hành vi này hầu như luôn là thứ bạn muốn nếu bạn muốn tạo chương trình đọc từ STDIN. Điều này thường được viết bằng một trong hai hình thức tương đương sau:
while (<ARGV>) { # ... do something with each input line ... } # or, equivalently: while (<>) { # ... do something with each input line ... }
- Có "chỉ là một ước" hoặc đang có một số lý do rắn không sử dụng
<STDIN>
?
Tôi cảm thấy <STDIN>
làm cho ý định của mã của tôi rõ ràng hơn sử dụng <>
hoặc <ARGV>
.
Dòng chảy của mã của tôi là như thế này
my @inp = <STDIN>;
my $len = $inp[0];
...
for(my $i = 0; $i < ($len + 0); $i++) {
my @temp = split (' ', $inp[$i]);
...
}
Cảm ơn. Nếu đây là lý do duy nhất thì tôi cảm thấy '' là tốt hơn. –
Lazer
@Lazer: nó không phải là "tốt hơn", nó áp đặt các hạn chế theo cách bạn có thể sử dụng chương trình. Tại sao điều đó không cần thiết? – Ether
Perl :: Phê bình dựa trên cuốn sách "Thực tiễn tốt nhất của Perl", chỉ đơn giản tuyên bố: "Tránh sử dụng * STDIN, trừ khi bạn thực sự muốn nói đến nó." Sự biện minh được đưa ra là một phiên bản dài hơn của câu trả lời ở trên. Nếu bạn thực sự có nghĩa rằng chỉ STDIN sẽ làm, không có đối số dòng lệnh được chấp nhận - sau đó sử dụng STDIN rõ ràng. – jmanning2k