如何让perl脚本运行另一个perl脚本?

时间:2016-01-27 21:27:34

标签: perl directory subdirectory

我正在编写一个大型Perl脚本,需要利用其他现有的Perl脚本。问题是主脚本需要从不同的文件夹中引用许多不同的脚本。例如,主脚本将包含在:

/perl/programs/io 

可能需要运行存储在以下内容中的脚本:

/perl/programs/tools 

请注意,除了工具之外还有其他正交文件夹,因此我需要能够动态访问其中的任何文件夹。

目前这就是我所得到的:

my $mynumber = '../tools/convert.pl bin2dec 1011';

理论上它应该从io目录返回,然后进入相应的工具目录并调用convert.pl脚本,同时传递参数。

所有这一切都是将字符串存储在$myNumber的单引号中。

3 个答案:

答案 0 :(得分:2)

我喜欢将命令的输出分配给数组,这样我就可以遍历数组来查找错误或其他消息。例如,如果我要制作一个zip文件,通过电子邮件发送给某人,我想在我继续发送和发送电子邮件之前检查zip程序是否有任何错误。

@msgs = `zip -f myfile.zip *.pl`; # Use backticks

您还可以将输出分配给标量:

$msg = `ls -al *.pl`; # Use backticks

答案 1 :(得分:2)

要运行任何系统命令或脚本,您只需使用`backticks`。通过观察另一个程序员的perl代码,我误读了这些奇怪的引号为“单引号”。

反引号也很好,因为它们将STDOUT中的文本返回到perl脚本,以便可以将输出分配给变量,如果使用system(“”),我发现这是不可能的;

答案 2 :(得分:1)

类似的问题答案不适用于我的perl版本。这条线

use IPC::System::Simple qw(system capture);

抛出一些错误。但是只使用系统工作,如下所示:

my $mynumber = system($^X, "../tools/convert.pl", 'bin2dec', '1011');

我可以使用上面的内容而不设置相同的东西来执行没有返回值的脚本,只发送参数。

这似乎是我需要做的最简单的方法,整个程序文件夹可以移动到任何地方,它仍然可以工作,因为没有使用上面的程序的父目录。