0

我有两个文件 tmp.pl 和 tmp2.pl。我想用 require 命令调用 tmp2.pl 但也发送一个参数。有没有更好的方法来做到这一点?

tmp.pl

require "tmp2.pl" "passed parameter";

tmp2.pl

print @_;
4

4 回答 4

4

据我所知,require不能用于发送参数。但这是一件好事,我认为,因为我想不出你应该这样做的理由。在我看来,你的设计是错误的。

tmp2.pl应该是:

  • 一个独立的 perl 程序,你应该运行它systemqx()
  • 一个模块,带有可选的导出标签等。
  • 定义类的包

但这只是我的想法....

于 2012-11-16T16:31:12.210 回答
2

可能有更好的方法来完成您想要做的任何事情,但是您可以通过类似的方式实现当前的子目标

{
    local @_ = ("passed parameter");
    require "tmp2.pl";
}

在我想从 perl 脚本中运行 perl 脚本的地方,我可能会考虑这个习惯用法。也就是说,我可以说

{
    local @ARGV = ("foo","bar");
    require "my_script.pl";
}

代替

system("perl","my_script.pl","foo","bar");

(这两个调用之间有很多微妙和不那么微妙的区别,所以很大程度上取决于您需要这些调用的哪些“功能”)

于 2012-11-16T21:54:10.287 回答
0

是的,我认为这应该有效。使用“require”来包含脚本。之后,您可以通过调用子函数来传递参数。修改后的脚本可以

require "tmp2.pl" ;
subfunc(parameter);
print @_;

于 2012-11-17T06:10:41.473 回答
0

假设您要执行其他程序并捕获其输出,我偏爱使用 IPC::Run 模块。

#!/usr/bin/perl

use strict;
use warnings;
use IPC::Run qw( run );

run( [ './tmp2.pl', @ARGV ], \'', \my $out, \my $err );

print "out: $out\n";
print "err: $err\n";
于 2012-11-18T04:53:48.220 回答