5

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

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

麦克风

4

2 回答 2

5

我知道这不是您问题的直接答案,但看起来您是在 Perl 的 Perforce 之上编写一些脚本?如果是这样,您可能会发现现有的库已经可以满足您的需求,并且可以省去很多麻烦,或者至少给您一些示例代码可以使用。

例如:

编辑:现在我知道你在做什么我猜你正在尝试将 p42svn 移植到 Windows,或者至少让它与 Windows 兼容。有关此确切问题的讨论,请参阅此线程。建议(未经测试)是尝试使用http://perldoc.perl.org/perlfork.html中“ Forking pipe open() not yet implemented ”下列出的代码示例来显式创建管道。

于 2009-02-11T04:03:21.040 回答
1

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

于 2009-02-11T04:03:47.467 回答