我正在尝试将一个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.
有谁知道如何使这项工作?谢谢!
麦克
答案 0 :(得分:5)
我知道这不是你问题的直接答案,但看起来你在Perl中用Perforce编写了一些东西?如果是这样,您可能会发现现有的库已经完成了您想要的工作,并为您节省了很多麻烦,或者至少为您提供了一些示例代码。
例如:
编辑:现在我知道你在做什么我猜你正在尝试将p42svn移植到Windows,或者至少让它与Windows兼容。有关此确切问题的讨论,请参阅this thread。建议(未经测试)是尝试在“分叉管道打开()尚未实现”下的 http://perldoc.perl.org/perlfork.html 下列出的代码示例,以显式创建管道。
答案 1 :(得分:1)
它不会按原样运作。你需要找到另一种方法来完成它正在做的事情。它看起来不像是需要叉管,但是很难说,因为我不知道p4是什么,并且很多代码都被丢失了以进行尖括号解释。