这个Perl程序会在Windows上运行吗?

时间:2010-10-28 00:45:43

标签: perl

我正在尝试在Windows上的Perl脚本中打开多个进程。程序结构看起来像这样......

 my($chld1_out, $chld1_in);
   my($chld2_out, $chld2_in);
   my($chld3_out, $chld3_in);
   my @cmds1=();
   my @cmds2=();
   my @cmds3=();

    $pid1 = open2($chld1_out, $chld1_in, 'ex1.exe')or die $!;
    $pid2 = open2($chld2_out, $chld2_in, 'ex2.pl')or die $!;
    $pid3 = open2($chld3_out, $chld3_in, 'ex3.exe')or die $!;

   print $chld1_in $cmds1[0];
   print $chld2_in $cmds2[0];
   $op1=<$chld1_out>;
   $op2=<$chld2_out>;
   if ( $op1 == 'done' && $op1 != 'done')
   print $chld1_in $cmds1[0];
   elsif ( $op1 != 'done' && $op1 == 'done')
   print $chld2_in $cmds2[0];
   elsif ( $op1 == 'done' && $op1 == 'done')
   print $chld1_in $cmds1[1];
   print $chld2_in $cmds2[1];
   .....
   .....
   for loops and while loops..... to process with the data output... and do conditional programming. 
   close $pid1 or die $!;
    close $pid2 or die $!;
    close $pid3 or die $!;

如果是,我该如何执行Perl脚本(ex2.pl) 我知道的一种方式是 system($ ^ X,“ex2.pl”,“arg”);

我很感激你的帮助这个尽快...

谢谢,

-Abishek

1 个答案:

答案 0 :(得分:3)

可能不是,“打开”阅读过程通常是幕后的分支和管道。而fork-execs在Windows *上不起作用。

要执行 Perl 脚本,只需do即可。

do 'ex2.pl';

如果你想传递args:

{   local @ARGV = qw<One Two Three>;
    do 'ex2.pl';
}

ex2.pl想要访问@ARGV时,它将是( 'One', 'Two', 'Three' )。当然,如果你想做任何perl速记ARGV技巧,最好本地化GLOB。

{ local *ARGV = [ qw<One Two Three> ]; ... }

* - 我一直认为使用具有可读stdout和stderr的Windows进程结构以及可写stdin可能应该