Perl выводит часть данных из скрипта, а часть — на экран

Perl выводит часть данных из скрипта, а часть — на экран

Как перенаправить часть вывода на экран и часть другого выбранного вывода из скрипта Perl?

решение1

Используя разные дескрипторы файлов.

По умолчанию у вас будут и , STDOUTи STDERR. printФункция в Perl на самом деле является сокращенной записью для print STDOUT.

В вашем терминале STDOUTуказан дескриптор файла 1и STDERRуказан дескриптор файла 2.

Вот пример печати в каждый дескриптор файла и перенаправления каждого в /dev/null.

$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
  • Первая команда печатает оба.
  • Вторая команда отбрасывает STDOUTи печатает толькоSTDERR
  • Третья команда отбрасывает STDERRи печатает толькоSTDOUT

Вы также можете объявить собственные дескрипторы файлов (например, файл журнала) и печатать в него. См perldoc -f open. .

решение2

Вам, вероятно, стоит прочитать документацию perlipc, в частности раздел об именованных каналах.

http://perldoc.perl.org/perlipc.html#Именованные-каналы

perlipc - межпроцессное взаимодействие Perl (сигналы, fifo, каналы, безопасные подпроцессы, сокеты и семафоры)

Если вам нужна двусторонняя (чтение и запись) связь с внешней программой, то вам пригодятся модули IPC::Open2 или IPC::Open3 (стандартная библиотека Perl, также задокументированная по указанному выше URL).

Связанный контент