Я использую IPC::Open3 за предложение, данное Hans Lub here.Предупреждение в IPC :: Open3 при использовании open3 дважды
Моя проблема заключается в том, что open3
вызов работает правильно в первый раз, но последующие вызовы возвращают предупреждение:
Use of uninitialized value in numeric ne (!=) at /usr/lib/perl5/5.8.8/IPC/Open3.pm line 215.
Пример кода я использую выглядит следующим образом:
use IPC::Open3;
my $pid;
# dup the old standard output and error
open(OLDOUT, ">&STDOUT") or die "Can't dup STDOUT: $!\n";
open(OLDERR, ">&STDERR") or die "Can't dup STDERR: $!\n";
my $transcript_file = "transcript.temp";
# reopen stdout and stderr
open (STDOUT, "|tee -i $transcript_file") or die "Can't reopen STDOUT: $!\n";
open (STDERR, ">&STDOUT") or die "Can't reopen STDERR: $!\n";
# print statements now write to log
print "Logging important info: blah!\n";
print STDERR "OOPS!\n";
#eval { $pid = open3("\*STDIN", "\*OLDOUT", "\*OLDERR", "ls"); }; # Tried this, but doesnt seem to help. Output does not appear on STDOUT.
eval { $pid = open3(">&STDIN", ">&OLDOUT", ">&OLDERR", "ls"); }; #This works correctly
waitpid($pid, 0);
eval { $pid = open3(">&STDIN", ">&OLDOUT", ">&OLDERR", "ls"); }; #First warning
waitpid($pid, 0);
eval { $pid = open3(">&STDIN", ">&OLDOUT", ">&OLDERR", "ls"); }; #Second warning
waitpid($pid, 0);
I извиниться, если я пытаюсь заставить других решить мои проблемы, но я просто не могу обойти это, и просмотр модулей Perl выходит за рамки моего нынешнего понимания.
Предлагаю начать с обновления модуля 'IPC :: Open3'. В текущей версии строка 215 является пустой строкой. – Borodin
Попробуйте 'open3 (\ * STDIN, \ * OLDOUT, \ * OLDERR)'. – nwellnhof
К сожалению, обновление модуля выходит за рамки моей сферы влияния. Я вынужден использовать то, что доступно: Perl версии 5.8.8 и Open3 V1.1. – Abhishek