【问题标题】:system("Child.pl $argument") does not pass argument to Child.pl [duplicate]system("Child.pl $argument") 没有将参数传递给 Child.pl [重复]
【发布时间】:2015-08-12 10:26:32
【问题描述】:

我的意图是从 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 前缀的脚本。
有什么办法可以让这些脚本保持完整,并且仍然让参数通过。

【问题讨论】:

  • 请告诉我们您正在使用什么系统?
  • 我正在使用 Windows 7 企业版,我的 perl 版本是 v5.8.4
  • 好的,你应该重新安装 Perl(ActivePerl 还是 Strawberry?),因为文件关联没有正确设置

标签: windows perl


【解决方案1】:

第一:

在两个脚本中添加 shebang 行。

第二:

给出子脚本的完整路径。

第三:

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

父.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;

孩子.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

这对你也应该没问题。

【讨论】:

  • 但在某些系统中,它无需任何编辑即可工作。我正在处理大量脚本,如果我必须编辑,我将不得不编辑大约 300 个脚本。是否有任何系统依赖或类似的东西。
  • 如果您使用的是 Windows,那么 shebang 行应该类似于:#!C:\home\apps\perl\bin\perl.exe -w。如果您可以在不起作用的地方发布特定的内容,那将很有帮助..
  • 访问子脚本中的参数时,在 C:\Child.pl 第 4 行的连接 (.) 或字符串中使用未初始化的值。如果没有 shebang,脚本会在某些机器上运行。那么是否会有任何系统设置使其无需编辑脚本即可运行。
  • @MalliParitala:Windows 上的 Perl 忽略 shebang 行,-w 等选项除外。无论如何use warnings 是优越的,所以只需省略 shebang 行 altogethe
猜你喜欢
  • 2015-04-13
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2013-06-19
  • 2018-06-27
  • 2020-04-15
  • 2012-02-25
相关资源
最近更新 更多