5

Unix から Windows に Perl スクリプトを移植しようとしていますが、 open 関数でサポートされていない fork パイプが原因で、ほとんど不可能な時間がかかっています。コードは次のとおりです。

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.

これを機能させる方法を知っている人はいますか?ありがとう!

マイク

4

2 に答える 2

5

あなたの質問に対する直接的な回答ではないことは承知していますが、Perl で Perforce の上に何かをスクリプト化しているように見えますか? もしそうなら、既存のライブラリがあなたが望むことをすでに行っていることに気づき、多くの頭痛の種から解放されるか、少なくとも作業するためのサンプルコードを提供してくれるかもしれません.

例えば:

編集:あなたが何をしているのかがわかったので、p42svnをWindowsに移植しようとしているか、少なくともWindowsと互換性を持たせようとしていると思います。この正確な問題の議論については、このスレッドを参照してください。推奨 (未テスト) は、 http://perldoc.perl.org/perlfork.htmlの " Forking pipe open() not yet implemented " の下にリストされているコード サンプルを試して、代わりに明示的にパイプを作成することです。

于 2009-02-11T04:03:21.040 に答える
1

そのままではうまくいきません。それが行っていることを達成するには、別の方法を見つける必要があります。フォークパイプの必要性が燃えているようには見えませんが、p4 が何であるかがわからず、多くのコードが角括弧の解釈に失われているため、判断するのは困難です。

于 2009-02-11T04:03:47.467 に答える