Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Syncing perltie filehandle STDOUT STDERR and system call

by karthikm897 (Initiate)
on Dec 14, 2012 at 12:09 UTC ( #1008822=perlquestion: print w/replies, xml ) Need Help??
karthikm897 has asked for the wisdom of the Perl Monks concerning the following question:


I wrote which ties STDOUT and STDERR with and respectively. tied print function in will look like

sub PRINT { my $class = shift; #orig_stdout is file pointer to /dev/stdout return print orig_stdout *some_stdout_wrapper_text* @_; }

All print statements from gets this wrapper automatically. But when there is a system command, the output of it doesn't get a wrapper. I tried using other alternatives like  IPC::Run3, Capture::Tiny with these I am not getting my requirements fulfilled that XS's(through system command in this case) stdout should be passed through and stderr through and they all should be buffered immediately.

Could someone please help me on this ?

Replies are listed 'Best First'.
Re: Syncing perltie filehandle STDOUT STDERR and system call
by jandrew (Chaplain) on Dec 14, 2012 at 16:02 UTC

    I'm not sure I follow what you are trying to do in the big picture here so I have to ask if you have read the documentation for open. There is a section specifically dealing with redirecting STDOUT and STDERR. However, if after that review you still need some additional performance then you should investigate a really cool module from tobyink++ called IO::Callback that may fit your requirements.

    Here is a Synopsis from him

      Thanks jandrew, I haven't tried with IO::Callback, with which I think I need not use tiefilehandle anyway. But yes for your question , I already tried using "open" in pipe mode, this is not going to help me with its syntax limitation as I have a different subroutine for stdout & stderr and I can't open a pipe for both at same time. though indiviual pipe did help me redirect to the tied module function call back.

        karthikm897 you are correct that you don't need to tie the file handle with IO::Callback. The trick there is to use the select command. On the other hand for STDERR there is a fair amount going on in the background with perl so I would reccomend either looking at the perl documentation for sigtrap or working with the special %SIG variable to target specific error message types rather than redirecting STDERR wholesale.

Re: Syncing perltie filehandle STDOUT STDERR and system call
by Anonymous Monk on Dec 14, 2012 at 12:19 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1008822]
Approved by marto
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2018-06-22 23:35 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (124 votes). Check out past polls.