1

How do I pipe some output to screen and some other selected output, out of the Perl script?

3

By using different file handles.

By default you'll have both STDOUT and STDERR. The print function in Perl is really short hand for print STDOUT.

In your terminal STDOUT is given the file handle 1 and STDERR is given the file handle 2.

Here's an example of printing to each file handle and redirecting each to /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
  • The first command prints both.
  • The second command throws away STDOUT and prints only STDERR
  • The third command throws away STDERR and prints only STDOUT

You can also declare your own file handles (e.g., a log file) and print to that instead. See perldoc -f open.

9
  • I cant run perldoc, the system crashes. Could you note how to declare my own non-file handle? – john-jones Jul 17 '12 at 19:45
  • Just print to STDOUT. It will go to the screen. – bahamat Jul 17 '12 at 19:46
  • i know that, there is STDOUT and STDERR, but i need to make my own, third handle which i can pipe specifically out of the program. – john-jones Jul 17 '12 at 19:47
  • Maybe you can clarify your question with some example code and where you want the output to go. – bahamat Jul 17 '12 at 19:49
  • I want some output to go to the screen, and some to be piped by 'number> some_bash_script'. Sorry but the sample code is exactly what I'm missing. – john-jones Jul 17 '12 at 19:52
1

you probably want to read the perlipc documentation, in particular the section on Named Pipes.

http://perldoc.perl.org/perlipc.html#Named-Pipes

perlipc - Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, and semaphores)

If you need two-way (read & write) communication with an external program, then the IPC::Open2 or IPC::Open3 modules (standard perl lib, also documented in the URL above) will be useful.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.