문제

나는 Unix에서 Windows로 Perl 스크립트를 포트하려고하지만 개방형 기능에 지원되지 않는 포킹 파이프로 인해 거의 불가능한 시간을 가질 수 있습니다. 코드는 다음과 같습니다.

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.

이 일을하는 방법을 아는 사람이 있습니까? 감사!

마이크

도움이 되었습니까?

해결책

나는 그것이 당신의 질문에 대한 직접적인 답이 아니라는 것을 알고 있지만, Perl에서 Perforce 위에 무언가를 스크립팅하는 것처럼 보입니까? 그렇다면 기존 라이브러리가 이미 원하는 것을 수행하고 많은 두통을 저장하거나 최소한 작업 할 샘플 코드를 제공 할 수 있습니다.

예를 들어:

편집하다: 이제 당신이하고있는 일을 알고 있으므로 P42SVN을 Windows에 포트하려고하거나 최소한 Windows와 호환되도록 생각합니다. 보다 이 스레드 이 정확한 문제에 대한 논의를 위해. 권장 사항 (Untested)은 나열된 코드 샘플을 시도하는 것입니다. http://perldoc.perl.org/perlfork.html 아래에 "포킹 파이프 Open ()은 아직 구현되지 않았습니다"대신 파이프를 명시 적으로 만듭니다.

다른 팁

그것은대로 작동하지 않을 것입니다. 하고있는 일을 달성하기 위해 다른 방법을 찾아야합니다. 포크 파이프에 대한 필요성을 태우는 것처럼 보이지는 않지만 P4가 무엇인지 모르고 많은 코드가 앵글 브래킷 해석으로 손실되고 있기 때문에 말하기는 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top