代码之家  ›  专栏  ›  技术社区  ›  mike

如何让分叉的管道在Perl中在Windows上工作?

  •  5
  • mike  · 技术社区  · 15 年前

    我试图将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 回复  |  直到 15 年前
        1
  •  5
  •   Jay    15 年前

    我知道这不是你问题的直接答案,但看起来你是在用Perl编写性能最高的脚本?如果是这样,您可能会发现一个现有的库已经做了您想要做的事情,并且为您自己节省了很多麻烦,或者至少给您一些示例代码。

    例如:

    编辑 :既然我知道你在做什么,我猜你是想把p42svn移植到Windows,或者至少让它与Windows兼容。见 this thread 关于这个确切问题的讨论。建议(未测试)尝试下面列出的代码示例 http://perldoc.perl.org/perlfork.html 在“ 分叉管道open()尚未实现 “以显式创建管道。

        2
  •  1
  •   chaos    15 年前

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