2009-02-11 6 views
5

Unix'den Windows'a bir Perl betiği yüklemeye çalışıyorum, ancak açık işlevde desteklenmeyen forking boruları nedeniyle çalışmasını neredeyse imkansız hale getiriyorum.Windows'ta Perl'de çalışmak için boruları nasıl sorabilirim?

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; 
} 

hatadır:

'-' is not recognized as an internal or external command, 
operable program or batch file. 

kimse bu işi yapmak nasıl biliyor mu İşte kod? Teşekkürler!

Mike

+0

Eğer ebeveyn çocuğun çıktısını beklerken etrafta oturacaksa, neden çatalım? – Schwern

+0

için (benim $ i = 1; $ i <@ $ sonuç; $ i ++) {print $ sonuç -> [$ i]; } daha iyi shift @ $ sonuç olarak yazılır; @ $ sonucu yazdır; (bundan sonra kullanmıyor olduğunuzdan) veya $ sonucu yazdıralım -> [$ _] için 1 .. $ # sonuç; Döngüler için C stili, bire bir hatalar için yalvarır ve genellikle bir menzil operatörü olarak yazılır. – Schwern

cevap

5

Ben sorunuzun doğrudan cevap değil biliyorum, ama Perl Perforce üstüne bir şeyler komut dosyası konum gibi görünüyor? Öyleyse, mevcut bir kütüphaneyi zaten istediğinizi yapar ve kendinizi çok fazla baş ağrısından kurtarır ya da en azından size çalışmak için örnek bir kod verin.

DÜZENLEME: Örneğin

Şimdi Seni çalışıyoruz tahmin ediyorum ne yaptığını biliyoruz Windows için port p42svn, ya da en azından Windows ile uyumlu hale getirin. Bu kesin sorunun tartışması için bkz. this thread. (Denenmemiş) öneri açıkça yerine boruyu oluşturmak için "açık borusunu() henüz uygulanmadı çatallamak " altında http://perldoc.perl.org/perlfork.html listelenen kod örnekleri denemektir.

+0

Yup, bir Performance veritabanını Subversion veritabanına geçirmeye çalışıyorum. Ancak, gezegende bunu yapabilen sadece bilinen bir betik var ve bu betik sadece benim için bir seçenek olmayan UNIX'te çalışacaktır. Windows üzerinde çalıştırmak için betiği aktarmaya çalışıyorum. Bugünden önce, hiç bir zaman PERL –

+0

Ok'a dokunmadım, o zaman bu p42svn olmalıdır. Evet ben tutarsızlıklar() baskı beri, çatal boru ikili dosyaları ve metin dosyaları hem işlemek için kullanılır inanıyoruz benim güncellenen cevabı – Jay

1

Olduğu gibi çalışmayacak. Yaptıklarını gerçekleştirmek için başka bir yöntem bulmanız gerekecek. Çatal boruya ihtiyaç duyulduğu gibi görünmüyor, ama p4'ün ne olduğunu bilmediğimden ve kodunuzun birçoğunun köşeli parantez yorumuna kaybolacağından beri bunu söylemek zor.

+0

Bkz. İşte konuyla ilgili bir iplik, var ancak henüz hiç kimse çözmüş: http://p42svn.tigris.org/ds/viewMessage.do?dsForumId=4900&dsMessageId=40586 –