【发布时间】:2017-07-19 13:42:50
【问题描述】:
我有这个 Perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
print <STDIN>, "\n";
print <STDIN>, "\n";
print <STDIN>, "\n";
print <STDIN>, "\n";
print <STDIN>, "\n";
我将“Hello”传递给脚本的标准输入:
echo "Hello" | perl test.pl
我希望它打印“Hello”五次,但它只打印“Hello”后跟五个换行符。谁能解释为什么这不能按预期工作?
【问题讨论】:
-
perl 中的
是一个文件描述符,每个标准输入只能读取一次。 -
嗯...我想将
<STDIN>分配给标量变量会更有意义。为什么我不能多读一遍? -
管道就是这样工作的。读完之后,就没有了。实际上这就是文件的一般工作方式——它们有一个结尾,当你到达结尾时,重复读取操作不会跳回到开头,即使在确实有能力返回的文件上也是如此。您知道哪种语言可以通过再次说“阅读”来重复阅读相同的输入?
-
@KaushikNayak
STDIN指的是一个裸字文件句柄,而不是一个描述符。<STDIN>是readline(STDIN),这也不是描述符。 -
@思南。谢谢 !。向你学习很棒的 Perl 东西很好