system(" Child.pl $ argument")不会将参数传递给Child.pl

时间:2015-08-12 10:26:33

标签: windows perl

我的目的是从Parent.pl脚本调用Child.pl脚本

我使用system()函数调用其他脚本 使用时

system("perl Child.pl $argument");  

参数传递。

但是在使用时

system("Child.pl $argument");

参数未通过。

这是因为代码中的任何错误。
我是perl脚本的新手。如果我有任何错误,请原谅我。

我使用的是Windows 7,我的perl版本是v5.8.4

我的Parent.pl脚本是

use warnings;

print "Inside Parent Script\n\n";
$var = 10;
print "Calling system without perl prefix\n";
system("Child.pl $var");
print "\nCalling system with perl prefix\n";
system("perl Child.pl $var");
print "\nEnd of Parent Script\n";

exit 0;  

我的Child.pl脚本是

use warnings;

print "\tInside Child Script\n";
print "\tArgument = $ARGV[0] \n";
print "\tEnd of Child Secipt\n";

exit 0;  

我的输出是

Inside Parent Script

Calling system without perl prefix
    Inside Child Script
Use of uninitialized value in concatenation (.) or string at C:\Child.pl line 4.
    Argument =  
    End of Child Script

Calling system with perl prefix
    Inside Child Script
    Argument = 10 
    End of Child Script

End of Parent Script

似乎在某些PC上它的工作没有perl前缀 我正在处理一大堆不使用perl前缀的脚本。
有什么方法可以保持这些脚本完好无损,并仍然让参数通过。

1 个答案:

答案 0 :(得分:0)

首先:

在两个脚本中添加shebang行。

第二

提供您的子脚本的完整路径。

第三

确保两个脚本都是可执行的。

Parent.pl:

#!/usr/bin/perl

use warnings;

print "Inside Parent Script\n\n";
$var = 10;
print "Calling system without perl prefix\n";
system("./Child.pl $var");
print "\nCalling system with perl prefix\n";
system("perl Child.pl $var");
print "\nEnd of Parent Script\n";

exit 0;

Child.pl:

#!/usr/bin/perl

use warnings;

print "\tInside Child Script\n";
print "\tArgument = $ARGV[0] \n";
print "\tEnd of Child Secipt\n";

exit 0; 

输出:

Inside Parent Script

Calling system without perl prefix
    Inside Child Script
    Argument = 10 
    End of Child Secipt

Calling system with perl prefix
    Inside Child Script
    Argument = 10 
    End of Child Secipt

End of Parent Script

这也应该适合你。