如何在Windows上使用Perl分支分支管道?

时间:2009-02-11 03:54:36

标签: windows perl fork pipe

我正在尝试将一个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.

有谁知道如何使这项工作?谢谢!

麦克

2 个答案:

答案 0 :(得分:5)

我知道这不是你问题的直接答案,但看起来你在Perl中用Perforce编写了一些东西?如果是这样,您可能会发现现有的库已经完成了您想要的工作,并为您节省了很多麻烦,或者至少为您提供了一些示例代码。

例如:

编辑:现在我知道你在做什么我猜你正在尝试将p42svn移植到Windows,或者至少让它与Windows兼容。有关此确切问题的讨论,请参阅this thread。建议(未经测试)是尝试在“分叉管道打开()尚未实现”下的 http://perldoc.perl.org/perlfork.html 下列出的代码示例,以显式创建管道。

答案 1 :(得分:1)

它不会按原样运作。你需要找到另一种方法来完成它正在做的事情。它看起来不像是需要叉管,但是很难说,因为我不知道p4是什么,并且很多代码都被丢失了以进行尖括号解释。