J'essaye de porter un manuscrit de Perl d'Unix à Windows mais ai un temps presque impossible de le faire fonctionner en raison des tuyaux de forking non soutenus dans la fonction ouverte. Voici le code:Comment puis-je obtenir des tuyaux de forking pour travailler dans Perl sous Windows?
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;
}
L'erreur est:
'-' is not recognized as an internal or external command,
operable program or batch file.
Est-ce que quelqu'un sait comment faire ce travail? Merci!
Mike
Si le parent est juste assis à attendre la sortie de l'enfant, pourquoi fourchette du tout? – Schwern
pour (my $ i = 1; $ i <@ $ résultat; $ i ++) {print $ résultat -> [$ i]; } mieux écrit que shift @ $ result; print @ $ résultat; (puisque vous ne l'utilisez pas après cela) ou imprimez $ result -> [$ _] pour 1 .. $ # result; Le style C pour les boucles mendient des erreurs off-by-one et est souvent mieux écrit en tant qu'opérateur de range. – Schwern