Как я могу заставить разветвляющиеся каналы работать на Perl в Windows?

StackOverflow https://stackoverflow.com/questions/535353

  •  22-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь перенести Perl-скрипт из Unix в Windows, но мне практически невозможно заставить его работать из-за неподдерживаемых каналов разветвления в функции open.Вот код:

sub p4_get_file_content {
    my $filespec = shift;
    return 'Content placeholder!' if ($options{'dry-run'});
    debug("p4_get_file_content: $filespec\n");
    local *P4_OUTPUT;
    local $/ = undef;
    my $pid = open(P4_OUTPUT, "-|");
    die "Fork failed: $!" unless defined $pid;
    if ($pid == 0) { # child
        my $p4 = p4_init();
        my $result = undef;
        $result = $p4->Run('print', $filespec);
        die $p4->Errors() if $p4->ErrorCount();
        if (ref $result eq 'ARRAY') {
            for (my $i = 1; $i < @$result; $i++) {
                print $result->[$i];
            }
        }
        $p4->Disconnect();
        exit 0;
    }
    my $content = <P4_OUTPUT>;
    close(P4_OUTPUT) or die "Close failed: ($?) $!";
    return $content;
}

Ошибка заключается в:

'-' is not recognized as an internal or external command,
operable program or batch file.

Кто-нибудь знает, как заставить это работать?Спасибо!

Майк

Это было полезно?

Решение

Я знаю, что это не прямой ответ на ваш вопрос, но, похоже, вы пишете что-то поверх Perforce на Perl?Если это так, вы можете обнаружить, что существующая библиотека уже делает то, что вы хотите, и избавит вас от множества головных болей или, по крайней мере, предоставит вам несколько примеров кода для работы.

Например:

Редактировать:Теперь, когда я знаю, что вы делаете, я предполагаю, что вы пытаетесь перенести p42svn в Windows или, скорее, сделать его совместимым, по крайней мере, с Windows.Видишь этот поток для обсуждения именно этого вопроса.Рекомендация (непроверенная) состоит в том, чтобы попробовать образцы кода, перечисленные на http://perldoc.perl.org/perlfork.html под "Разветвление трубы открыто() еще не реализовано" вместо этого явно создать канал.

Другие советы

Это не сработает как есть.Вам нужно будет найти другой метод для выполнения того, что он делает.Не похоже, что существует острая необходимость в fork-pipe, но трудно сказать, поскольку я не знаю, что такое p4, и большая часть вашего кода теряется из-за интерпретации угловых скобок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top