在我的PERL代码中,我需要使用Windows命令提示符执行一些操作,例如打开记事本即
system("start notepad");
Run Code Online (Sandbox Code Playgroud)
现在我发现perl不会移动到下一个语句,直到前一个语句结束.有没有办法在向系统发送命令后,perl移动到下一个语句而不检查系统任务是否结束.
我做了一个示例代码来解释我的问题.我在这里完成了每项任务后的时间.
use Time::HiRes qw(time);
use POSIX qw(strftime);
####################printing time code starts###########
$t = time;
$date = strftime "%Y%m%d %H:%M:%S", localtime $t;
$date .= sprintf ".%03d", ($t-int($t))*1000; # without rounding
print "Statement 1 executed at $date\n";
#######################printing time code ends###########
####################printing time code starts###########
$t = time;
$date = strftime "%Y%m%d %H:%M:%S", localtime $t;
$date .= sprintf ".%03d", ($t-int($t))*1000; # without rounding
print "Statement 2 executed at $date\n";
#######################printing time code ends#####
system("start notepad");
####################printing time code starts###########
$t = time;
$date = strftime "%Y%m%d %H:%M:%S", localtime $t;
$date .= sprintf ".%03d", ($t-int($t))*1000; # without rounding
print "Statement 3 executed at $date\n";
Run Code Online (Sandbox Code Playgroud)
我的输出是:
Statement 1 executed at 20150101 19:09:37.614
Statement 2 executed at 20150101 19:09:37.614
Statement 3 executed at 20150101 19:09:37.647
Run Code Online (Sandbox Code Playgroud)
显然,语句2和语句3之间存在很大差异,我想避免它.请给出建议.
注意:启动记事本只是一个例子,我可能想要将1MB文件夹中的100MB文件复制到另一个文件夹,我不希望perl在向系统发送命令后等待.
仅在win32 perl上,您可以执行以下操作:
system( 1, "start notepad" );
Run Code Online (Sandbox Code Playgroud)
告诉系统立即返回.这在perlport中有记录.