【问题标题】:How do I make a perl script run another perl script?如何让一个 perl 脚本运行另一个 perl 脚本?
【发布时间】:2016-05-05 01:19:52
【问题描述】:

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

/perl/programs/io 

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

/perl/programs/tools 

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

目前这是我得到的:

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

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

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

【问题讨论】:

  • Uhhh...您只是将字符串分配给变量。也许您打算使用backticks
  • @MattJacob 是的,但是对于这种情况,接受的答案有点矫枉过正。
  • @simbabque 也许是公认的答案。但是该线程中还有其他答案可以回答这个问题(问题是一样的)。
  • @m,我同意,但我的投票会影响它,所以我没有。

标签: perl directory subdirectory


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      抛出一些错误。但是,仅使用 system 就可以了,如下所示:

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

      我可以在不设置 equal 的情况下使用上述内容来执行不返回值且仅发送参数的脚本。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-10
        • 2019-03-07
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 2016-04-07
        相关资源
        最近更新 更多