2016-01-27 155 views
2

我正在编写一个庞大的Perl脚本,它需要使用其他现有的Perl脚本。问题是主脚本需要引用来自不同文件夹的许多不同脚本。例如主脚本将被包含在:如何让perl脚本运行另一个perl脚本?

/perl/programs/io 

它可能需要运行存储在一个脚本:

/perl/programs/tools 

注意,还有除了工具等正交文件夹,这样我需要能够随时访问他们中的任何一个。

目前,这是我得到:

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

从理论上讲,当通过它的参数,它应该回到从IO目录移动然后输入相应的工具目录,并调用convert.pl脚本。

所有这些都将字符串存储在单引号中,以$myNumber

+5

呃......你只是给一个变量赋值一个字符串。也许你打算使用[反推](http://perldoc.perl.org/perlop.html#%60_STRING_%60)? –

+3

[如何在Perl脚本中运行Perl脚本?](http://stackoverflow.com/questions/364842/how-do-i-run-a-perl-script-from-within-一个perl脚本) –

+0

@MattJacob是的,但接受的答案有点矫枉过正这种情况。 – simbabque

回答

1

要运行任何操作系统命令或脚本所有你需要做的就是使用`一段单列。通过观察另一个程序员的Perl代码,我误读了这些奇怪的引号以用于'单引号'。

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

1

类似的问题答案不适用于我的Perl版本。该行

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

会引发一些错误。然而仅仅使用系统的工作原理,这样的:

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

我可以用上面没有设置等于什么来执行它没有返回值,并只发送参数的脚本。

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

1

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

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

您也可以将输出到一个标量:

$msg = `ls -al *.pl`; # Use backticks 
相关问题