Re: Perl DBI sets $SIG{PIPE} to 'IGNORE'

[email protected] (Bob McGowan)
Newsgroups perl.dbi.users
Organization Symantec, Inc.
Message-ID <[email protected]>
On 07/28/2010 05:53 PM, Stuart Cooper wrote:
> Hi Damian,
> 
>> my $first_line = `grep -v '#' $filename|head -n 1`; # to get the first
>> non-comment line
> 
--extra code deleted--

> It's a broken pipe because the right side of it is not valid.

Could you elaborate on why?  I tried it and it worked for me.

> 
> Try playing around with this 10-liner:
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> 
> $SIG{'PIPE'} = 'IGNORE';
> # $SIG{'PIPE'} = 'DEFAULT';
> 
> my $filename = '/etc/apache2/apache2.conf';
> my $first_line;
> 
> # $first_line = `grep -nv '#' $filename| misspelledhead -n 1`; # to
> get the first non-comment line
> $first_line = `grep -nv '#' $filename| head -n 1`; # to get the first
> non-comment line
> 
> print "first non comment line is $first_line";
> 
> Good luck,
> Stuart.

In fact, I tried your code snippets as well as the OP's, and the only
error I saw, with a misspelled command name, was:

  sh: ehead: command not found

I tried this without changing any signal and with "$SIG{'PIPE'} =
'IGNORE'", no difference.

In other words, the shell, when setting up the command, verifies it can
find all commands in the pipe sequence before it tries anything else.

Now, when I gave 'head' an invalid option, so it was found and ran, but
exited *without* reading the input, then I got the broken pipe error.
But I also got an error from 'head' about invalid options.

Bottom line is I can't figure out what it is that is 'not valid' in the
original?

-- 
Bob McGowan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.