Правильное использование IPC :: Run in Perl - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь запустить IPC :: Запуск, как описано в https://metacpan.org/pod/IPC::Run

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie qw(:all);
use IPC::Run qw(run timeout);

my ($out, $err);
## First,a command to run:
my @cat = qw( cat );

## Using run() instead of system():
my $in = __FILE__;
run \@cat, \$in, \$out, \$err, timeout( 10 ) or die "cat: $?";
say "\$out = $out";
say "\$err = $err";
say "\$in  = $in";

Однако вывод не верен:

con@con-VirtualBox:~/Scripts$ perl ipc_run.pl
$out = ipc_run.pl
$err = 
$in  = ipc_run.pl

$out - это просто имя файла, когда оно должно быть содержимым файла. Это следует делать cat ipc_run.pl в командной строке

Как я могу заставить $out отобразить вывод как надо?

1 Ответ

0 голосов
/ 11 января 2019

Вы передаете имя файла как STDIN в cat, и, поскольку вы не передали ему никаких аргументов, он повторяет это для вывода; Вот как cat работает. Вместо этого передайте имя файла в качестве аргумента:

use strict;
use warnings;
use IPC::Run qw(run timeout);

my @cat = ('cat', __FILE__);
run \@cat, \undef, \my $out, \my $err, timeout( 10 ) or die "cat: $?";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...