English 中文(简体)
我如何在Windows上使Perl中的叉管道工作?
原标题:
  • 时间:2009-02-11 03:54:36
  •  标签:

我正在尝试将一个Perl脚本从Unix移植到Windows,但由于open函数中不支持forking pipes而几乎无法使其工作。以下是代码:

sub p4_get_file_content {
    my $filespec = shift;
    return  Content placeholder!  if ($options{ dry-run });
    debug("p4_get_file_content: $filespec
");
    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.

有人知道怎样让这个工作吗?谢谢!

迈克

最佳回答

我知道这不是对你问题的直接回答,但是看起来你正在使用Perl在Perforce之上编写脚本?如果是这样,你可能会发现现有的库已经做了你想要的,并且为自己省去了很多麻烦,或者至少给你一些样本代码来工作。

例如:

编辑:现在我知道你在做什么,我猜测你正在尝试将p42svn移植到Windows,或者至少让它兼容Windows。参见这个讨论串讨论这个确切的问题。建议(未经测试)是尝试在http://perldoc.perl.org/perlfork.html下列出的"尚未实现的forking pipe open()"代码示例中显式创建管道。

问题回答

这样不会起作用。您需要找到另一种方法来完成它正在做的事情。看起来没有那么迫切需要使用fork-pipe,但很难确定,因为我不知道P4是什么,您的代码大部分都被尖括号解释所遗失。





相关问题
热门标签