我的Perl程序如何在Linux上获得标准输入?

时间:2010-09-24 15:53:24

标签: linux perl pipe stdin

我是Perl编程的新手,但我对linux有相当多的经验。可以说我有以下代码:

while(1) {
        my $text = <STDIN>;
        my $text1 = <STDIN>;
        my $text2 = <STDIN>;
} 

现在,主要的问题是:Perl中的STDIN是直接从linux机器上的/ dev / stdin读取还是必须将/ dev / stdin管道传递给Perl脚本?

3 个答案:

答案 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也是如此。

如果您关心每种情况并且想要以不同的方式处理每种情况,那么您可以尝试不同的方法。