Steve Grazzini <[EMAIL PROTECTED]> writes:
> On Sun, Jun 29, 2003 at 01:37:39PM -0700, Harry Putnam wrote:
>>
>> From perldoc it appears that something like this should work but it
>> doesn't either:
>> my ($wtr, $wdr, $err, @item, $pid);
>>
>> $pid = open2($wtr, $rdr, 'perl -e ', 'use CPAN;', 'CPAN::Shell->i;');
>
> This is the equivalent of:
>
> % perl -e 'use CPAN;' 'CPAN::Shell->i;'
>
> Which doesn't work either (each bit of code needs a '-e').
>
> Anyway, I missed the opening of this thread, but it seems
> strange to open up a subprocess like this. Can't you just
> use the CPAN::Shell methods right in the main script?
Thanks for your interest:
I've looked up an answer to this problem that I finally remembered
having asked about a year ago on the moderated perl newsgroup.
comp.lang.perl.moderated.
I got good answers there but had forgotten them so I now have a
handle on this. (I'll include a snippet below)
The original script tried to redirect the output of cpan commands and
was not able to, so the thread has been about how to do that.
>From OP:
How do I go about making the output from
CPAN::Shell->i; go into a file handle
Instead of STDOUT like it does in this formulation:
$target = "somefile";
if($opt_r){
open(FH,">$target") or die "Cannot open $target: $!";
print FH CPAN::Shell->i;
}
}
One way to do it [although it doesn't write into a file handle as
stipulated in the OP. It does capture the data and allow
manipulation]:
(from a response on comp.lang.perl.moderated)
[Not sure if the author would want his name included so left it
unattributed]
[...]
Since CPAN::Shell->i writes to stdout, you need to fork and have
another process do the work. Something like this:
#!/usr/local/bin/perl
use CPAN;
my $pid = open(CPAN_I, "-|");
die "Can't fork: $!" if not defined $pid;
if ($pid == 0) # child
{
CPAN::Shell->i;
exit 0;
}
my @cpan_lines = <CPAN_I>;
close CPAN_I or warn "child exited: $?";
## I've added a dopey for loop [ed -HP]
for (@cpan_lines){
print "WE got you... haha => $_";
}
[...]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]