<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How To Redirect STDERR to STDOUT in Perl</title>
	<atom:link href="http://www.masaokitamura.com/2009/08/how-to-redirect-stderr-to-stdout-in-perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.masaokitamura.com/2009/08/how-to-redirect-stderr-to-stdout-in-perl/</link>
	<description>Blog</description>
	<lastBuildDate>Fri, 20 Jan 2012 19:51:22 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2-beta1-17916</generator>
	<item>
		<title>By: sinx</title>
		<link>http://www.masaokitamura.com/2009/08/how-to-redirect-stderr-to-stdout-in-perl/#comment-17</link>
		<dc:creator>sinx</dc:creator>
		<pubDate>Thu, 11 Feb 2010 14:57:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.masaokitamura.com/?p=333#comment-17</guid>
		<description>Hello,


Think about this code in context of redirecting STDOUT, STDERR:

#!/usr/bin/perl

use strict;
use warnings;


use POSIX qw(:errno_h ceil floor :sys_wait_h);


my @run = (  &#039;ls&#039;, &#039;-al&#039; );
my $pid = fork();
die &quot;Unable to fork $!&quot; unless defined($pid);
if (!$pid) {  # child
        open(LOG,&quot;&gt;&quot;, &quot;foo-log.log&quot;);
        #close(STDERR);
        #close(STDOUT);
        #open STDERR, &quot;&gt;&gt;&amp;LOG&quot;;
        #open STDOUT, &quot;&gt;&gt;&amp;LOG&quot;;
        *STDERR = *LOG;
        *STDOUT = *LOG;
        print LOG &quot;PRINT TO LOG\n\n&quot;;

        exec { $run[0] } @run;
        die &quot;Unable to execute: $!&quot;;
}
waitpid($pid, WNOHANG);


and output is shown on terminal not in log file:


but when running this:

#!/usr/bin/perl

use strict;
use warnings;


use POSIX qw(:errno_h ceil floor :sys_wait_h);


my @run = (  &#039;ls&#039;, &#039;-al&#039; );
my $pid = fork();
die &quot;Unable to fork $!&quot; unless defined($pid);
if (!$pid) {  # child
        open(LOG,&quot;&gt;&quot;, &quot;foo-log.log&quot;);
        close(STDERR);
        close(STDOUT);
        open STDERR, &quot;&gt;&gt;&amp;LOG&quot;;
        open STDOUT, &quot;&gt;&gt;&amp;LOG&quot;;
        #*STDERR = *LOG;
        #*STDOUT = *LOG;
        print LOG &quot;PRINT TO LOG\n\n&quot;;

        exec { $run[0] } @run;
        die &quot;Unable to execute: $!&quot;;
}
waitpid($pid, WNOHANG);


Everything is ok, maybe you know why:

*STDERR = *LOG;
*STDOUT = *LOG;

doesn&#039;t work?</description>
		<content:encoded><![CDATA[<p>Hello,</p>
<p>Think about this code in context of redirecting STDOUT, STDERR:</p>
<p>#!/usr/bin/perl</p>
<p>use strict;<br />
use warnings;</p>
<p>use POSIX qw(:errno_h ceil floor :sys_wait_h);</p>
<p>my @run = (  &#8216;ls&#8217;, &#8216;-al&#8217; );<br />
my $pid = fork();<br />
die &#8220;Unable to fork $!&#8221; unless defined($pid);<br />
if (!$pid) {  # child<br />
        open(LOG,&#8221;&gt;&#8221;, &#8220;foo-log.log&#8221;);<br />
        #close(STDERR);<br />
        #close(STDOUT);<br />
        #open STDERR, &#8220;&gt;&gt;&amp;LOG&#8221;;<br />
        #open STDOUT, &#8220;&gt;&gt;&amp;LOG&#8221;;<br />
        *STDERR = *LOG;<br />
        *STDOUT = *LOG;<br />
        print LOG &#8220;PRINT TO LOG\n\n&#8221;;</p>
<p>        exec { $run[0] } @run;<br />
        die &#8220;Unable to execute: $!&#8221;;<br />
}<br />
waitpid($pid, WNOHANG);</p>
<p>and output is shown on terminal not in log file:</p>
<p>but when running this:</p>
<p>#!/usr/bin/perl</p>
<p>use strict;<br />
use warnings;</p>
<p>use POSIX qw(:errno_h ceil floor :sys_wait_h);</p>
<p>my @run = (  &#8216;ls&#8217;, &#8216;-al&#8217; );<br />
my $pid = fork();<br />
die &#8220;Unable to fork $!&#8221; unless defined($pid);<br />
if (!$pid) {  # child<br />
        open(LOG,&#8221;&gt;&#8221;, &#8220;foo-log.log&#8221;);<br />
        close(STDERR);<br />
        close(STDOUT);<br />
        open STDERR, &#8220;&gt;&gt;&amp;LOG&#8221;;<br />
        open STDOUT, &#8220;&gt;&gt;&amp;LOG&#8221;;<br />
        #*STDERR = *LOG;<br />
        #*STDOUT = *LOG;<br />
        print LOG &#8220;PRINT TO LOG\n\n&#8221;;</p>
<p>        exec { $run[0] } @run;<br />
        die &#8220;Unable to execute: $!&#8221;;<br />
}<br />
waitpid($pid, WNOHANG);</p>
<p>Everything is ok, maybe you know why:</p>
<p>*STDERR = *LOG;<br />
*STDOUT = *LOG;</p>
<p>doesn&#8217;t work?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

