On Wed, 1 May 2013 07:58:38 -0700 "Ron Bergin" <r...@i.frys.com> wrote:
> Manfred Lotz wrote: > > Hi there, > > I have a script where I log stuff to a file and the same time > > displays it to stdout using Log4perl. > > > > Here is a minimal example where I log a command which fails. > > > > <--------------------snip-------------------------> > > #! /usr/bin/perl > > > > use strict; > > use warnings; > > > > #use autodie; > > use Log::Log4perl qw(:easy); > > > > Log::Log4perl->easy_init( > > { level => $DEBUG, file => "> test.log", }, > > { level => $DEBUG, file => 'STDOUT', } > > ); > > > > my $cmd = 'uname'; > > my $parms = '-f'; # invalid parm > > > > INFO( "Issuing [$cmd $parms]" ); > > open my $fh, '-|', "$cmd $parms 2>&1" or die "open: $!"; > > INFO( "$_" ) while <$fh>; > > close $fh; > > > > <--------------------snap-------------------------> > > > > This works great. Output is like this: > > 2013/05/01 16:16:40 Issuing [uname -f] > > 2013/05/01 16:16:40 uname: invalid option -- 'f' > > 2013/05/01 16:16:40 Try 'uname --help' for more information. > > > > > > However, if I add autodie then I get: > > > > 2013/05/01 16:16:33 Issuing [uname -f] > > 2013/05/01 16:16:33 uname: invalid option -- 'f' > > 2013/05/01 16:16:33 Try 'uname --help' for more information. > > Can't close(GLOB(0x2554c80)) filehandle: '' at ./test02.pl line 20 > > > > > > close does not fail if the command is ok, e.g. 'uname -a'. Can > > anybody explain to me why close fails in the example above? > > > > > > > > -- > > Thanks, > > Manfred > > If you test the return code of the close call, you'll see that it > fails in both cases. > > I'm not sure why it's failing, but personally I'd use IPC::Open3 > instead of opening the pipe as you are currently doing. That way, > you could capture the stdout and stderr separately and log the stderr > as WARN or ERROR. > > Ron Bergin > > Hm, I'll take a look a IPC::Open3. However, I prefer to have stdout and stderr merged. -- Manfred -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/