Как узнать, подключена ли моя программа к другому (Perl) "ls" ведет себя по-разному, когда его выход передается по трубопроводу: > ls ??? bar foo > ls ??? | cat bar foo Как это знать, и как я могу это сделать в Perl? Ответ 1 В Perl оператор проверки файла -t указывает, является ли дескриптор файла (включая STDIN) подключен к терминалу. Существует также оператор -p test, чтобы указать, является ли дескриптор файла прикрепляется к трубе. $ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' term:1, pipe:0 $ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' < /tmp/foo term:0, pipe:0 $ echo foo | perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' term:0, pipe:1 Документация документа для проверки файлов на perldoc -f -X. Ответ 2 use IO::Interactive qw(is_interactive); is_interactive() or warn "Being piped\n";
Ответ 1 В Perl оператор проверки файла -t указывает, является ли дескриптор файла (включая STDIN) подключен к терминалу. Существует также оператор -p test, чтобы указать, является ли дескриптор файла прикрепляется к трубе. $ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' term:1, pipe:0 $ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' < /tmp/foo term:0, pipe:0 $ echo foo | perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' term:0, pipe:1 Документация документа для проверки файлов на perldoc -f -X.