in reply to Re^3: Silencing errors in a php script using perl nd pipes.
in thread Silencing errors in a php script using perl nd pipes.

For that last bit of code. If I remove the . from './home/bevs/bin/email' the php script runs but does not get the email when it reads its STDIN...
#!/usr/bin/perl use strict; use warnings; use IPC::Open3 qw( open3 ); use Symbol qw( gensym ); my $pid = open3( \*STDIN, \*STDOUT, my $fr_chld_err = gensym(), '/home/bevs/bin/email' ); while (<$fr_chld_err>) { next if /Module 'eAccelerator' already loaded/; print STDERR $_; } waitpid($pid, 0) or die;
How do I modify that perl code to pass the standard input on?

Replies are listed 'Best First'.
Re^5: Silencing errors in a php script using perl nd pipes.
by ikegami (Patriarch) on Jun 20, 2008 at 17:45 UTC
    For reasons I don't understand at the moment, passing \*STDIN and \*STDOUT doesn't work. The following does, though.
    my $pid = open3( '<&STDIN', '>&STDOUT', my $fr_chld_err = gensym(), 'email' )

    Tested as follows:

    File wrapper:

    #!/usr/bin/perl use strict; use warnings; use IPC::Open3 qw( open3 ); use Symbol qw( gensym ); my $pid = open3( '<&STDIN', '>&STDOUT', my $fr_chld_err = gensym(), 'email' ); while (<$fr_chld_err>) { next if /Module 'eAccelerator' already loaded/; print STDERR $_; } waitpid($pid, 0) or die;

    File email:

    #!/usr/bin/perl use strict; use warnings; use IO::Handle qw( ); STDOUT->autoflush(1); STDERR->autoflush(1); print STDERR ("PHP Warning: Module 'eAccelerator' already loaded in U +nknown on line 0\n"); print STDOUT ("[STDOUT]\n"); print STDERR ("[STDERR]\n"); while (<STDIN>) { print STDERR (">> $_"); }
    $ echo meow | wrapper [STDOUT] [STDERR] >> meow