评估 if(-t STDIN) 时,所以有人输入 perl example.pl < testing.txt 。这不像通过 ls | ./example.pl 传入的数据。我怎样才能得到这种行为? 最佳答案 测试 -p STDIN ,它检查文件句柄 STDIN 是否附加到管道。touch fooperl -e 'print -p STDIN' < foo # nothingcat foo | perl -e 'print -p STDIN' # 1但我不确定我是否理解你的问题。在这三种情况下1. perl -e 'print $_=<STDIN>' < <(echo foo)2. echo foo | perl -e 'print $_=<STDIN>'3. perl -e 'print $_=<STDIN>' # then type "foo\n" to the console输入是相同的,并且都可以通过 STDIN 文件句柄访问。在前两种情况下,-t STDIN 将评估为 false,在第二种情况下,-p STDIN 将为 true。这三种情况之间的行为差异是微妙的,通常并不重要。显然,第三种情况将等到至少收到一行输入(以“\n”或 EOF 结尾)。前两种情况之间的差异更加微妙。当程序的输入从另一个进程的输出通过管道传输时,在延迟或该程序是否缓冲其输出方面,您在某种程度上受制于第一个进程。也许你可以扩展你说的意思perl example.pl < testing.txt不像ls | ./example.pl关于perl - < UNIX 中的运算符,传递给 Perl 脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9035824/ 10-14 18:45