Как я могу отправить вывод Perl в a и STDOUT и переменная?

Используйте .find, чтобы найти потомков, соответствующих определенному селектору:

mySel.find("option[value='option1']").remove()
10
задан szabgab 8 April 2014 в 11:21
поделиться

6 ответов

Вы хотите Получение:: Крошечный

use Capture::Tiny 'tee';
my $output = tee { system( "some command" ) };

Я записал это для замены Мишени и приблизительно 20 других модулей, которые делают своего рода получение, но испорчены так или иначе.

- xdg (иначе dagolden)

9
ответ дан 3 December 2019 в 15:36
поделиться

Возможно, мой ответ здесь может помочь Вам: Как я могу сцепиться в печать Perl?

2
ответ дан 3 December 2019 в 15:36
поделиться

Вывод к обоим потокам имеют быть одновременным?

В противном случае Вы могли сделать:

my $var = 'cmd'
my $output = `$cmd`
print STDOUT $output

или для более безопасной версии, которая не включает вызов подоболочки и печатает к STDOUT строку за один раз:

sub backtick(@)
{
    my $pid = open(KID, '-|');
    die "fork: $!" unless defined($pid);
    if ($pid) {
        my $output;
        while (<KID>) {
            print STDOUT $_;
            $output .= $_; # could be improved...
        }
        close(KID);
        return $output;
    } else {
        exec @_;
    }
}

my @cmd = ('/bin/ls', '-l');
my $output = backtick(@cmd);
15
ответ дан 3 December 2019 в 15:36
поделиться

Можно сделать это через дескриптор файла также. Не столь изящный как некоторые решения, но это, вероятно, работало бы. Что-то вроде:

my $foo;
open(READ, "env ps |");
while (<READ>) {
    print;
    $foo .= $_;
}
print $foo;
close(READ);
1
ответ дан 3 December 2019 в 15:36
поделиться

Отправьте вывод от модуля Мишени до /dev/stdout (или /dev/fd/1).

0
ответ дан 3 December 2019 в 15:36
поделиться

Вы могли использовать IO::String модуль к select() STDOUT к строке и затем звонят system() выполнять команду. Можно собрать вывод из IO::String дескриптор. Это эффективно делает то, что делает синтаксис обратной галочки.

Таким образом для сбора команды производит в реальном времени, работайте system() управляйте асинхронно через fork() или некоторые другие средства и опрос дескриптор для обновлений.

Править: На OP оказывается, что этот подход не работает. select() не влияет system() вызовы.

Кроме того, IO::String был заменен новым open() синтаксис начиная с Perl 5.8, который делает ту же функцию.

1
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: