我是Perl编程的新手,但我对linux有相当多的经验。可以说我有以下代码:
while(1) {
my $text = <STDIN>;
my $text1 = <STDIN>;
my $text2 = <STDIN>;
}
现在,主要的问题是:Perl中的STDIN是直接从linux机器上的/ dev / stdin读取还是必须将/ dev / stdin管道传递给Perl脚本?
答案 0 :(得分:2)
如果您不向脚本提供任何内容,它将坐在那里等待您输入内容。当你这样做时,它将被放入$text
然后脚本将继续等待你输入一些东西。当你这样做时,那将进入$text1
。随后,脚本将再次等待您输入内容。完成后,输入将进入$text2
。然后,整个事情将无限期重复。</ p>
如果您将脚本调用为
$ script < input
其中input
是一个文件,脚本将从文件中读取类似于上面的行,然后,当流用完时,将开始为每个变量分配undef
一段无限的时间
AFAIK,没有编程语言,从预定义的STDIN
(或stdin
)文件句柄中读取需要您调用程序:
$ script < /dev/stdin
答案 1 :(得分:1)
它直接从STDIN文件描述符中读取。如果您运行该脚本,它将等待输入;如果你将数据传递给它,它将循环直到所有数据都被消耗,然后永远等待。
您可能希望将其更改为:
while (my $test = <STDIN>) {
# blah de blah
}
所以EOF会终止你的程序。
答案 2 :(得分:1)
默认情况下,Perl的STDIN只是连接到标准输入文件描述符。除此之外,Perl并不真正关心数据的来源和位置。如果您正在从管道读取输出,重定向文件或在终端上以交互方式键入,则Perl也是如此。
如果您关心每种情况并且想要以不同的方式处理每种情况,那么您可以尝试不同的方法。