Ich versuche, ein Perl-Skript von Unix zu Windows zu portieren, aber ich habe eine fast unmögliche Zeit, es zu arbeiten wegen der nicht unterstützten Forking Pipes in der offenen Funktion. Hier ist der Code:Wie kann ich Forking Pipes in Perl unter Windows arbeiten lassen?
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;
}
Der Fehler ist:
'-' is not recognized as an internal or external command,
operable program or batch file.
Wer weiß, wie diese Arbeit zu machen? Vielen Dank!
Mike
Wenn der Elternteil einfach nur herumsitzen und auf die Ausgabe des Kindes warten soll, warum überhaupt? – Schwern
für (mein $ i = 1; $ i <@ $ ergebnis; $ i ++) {print $ ergebnis -> [$ i]; } besser geschrieben als shift @ $ result; Druck @ $ Ergebnis; (da du es danach nicht verwendest) oder drucke $ result -> [$ _] für 1 .. $ # result; C-Style for-Loops sind um einen Fehler nach dem anderen und oft besser als Range-Operator geschrieben. – Schwern