Chr*_*ris 3 perl command-line stdin
在评估时if(-t STDIN),<UNIX运算符是否计为STDIN?如果没有,我如何获得该数据?
所以有人打字perl example.pl < testing.txt.这不像通过管道传输的数据ls | ./example.pl.我怎么能得到这种行为?
测试-p STDIN,检查文件句柄STDIN是否附加到管道.
touch foo
perl -e 'print -p STDIN' < foo # nothing
cat foo | perl -e 'print -p STDIN' # 1
Run Code Online (Sandbox Code Playgroud)
但我不确定我理解你的问题.在所有这三种情况中
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
Run Code Online (Sandbox Code Playgroud)
输入是相同的,并且都可以通过STDIN文件句柄访问.在前两种情况下,-t STDIN将评估为false,而在第二种情况下,-p STDIN将为true.
这三种情况之间的行为差异很微妙,通常并不重要.显然,第三种情况将等到至少接收到一行输入(以"\n"或EOF结尾).前两种情况之间的差异更为微妙.当程序的输入通过另一个进程的输出进行管道传输时,您在某种程度上受到关于延迟的第一个进程的影响,或者该程序是否缓冲其输出.
也许你可以扩展你所说的意思
perl example.pl < testing.txt
Run Code Online (Sandbox Code Playgroud)
表现得不像
ls | ./example.pl
Run Code Online (Sandbox Code Playgroud)