Тест -p STDIN
, который проверяет, прикреплен ли дескриптор файла STDIN
к каналу.
touch foo
perl -e 'print -p STDIN' < foo # nothing
cat 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