在perl中使用必需命令将参数传递给脚本

时间:2012-11-16 16:19:45

标签: perl

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

tmp.pl

require "tmp2.pl" "passed parameter";

tmp2.pl

print @_;

4 个答案:

答案 0 :(得分:4)

据我所知,require不能用于发送参数。但我认为这是一件好事,因为我无法想到你应该想要的原因。在我看来你的设计是错误的。

tmp2.pl应该是:

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

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

答案 1 :(得分:2)

可能有更好的方法来完成你想要做的任何事情,但是你可以通过像

这样的目标实现你当前的子目标
{
    local @_ = ("passed parameter");
    require "tmp2.pl";
}

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

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

而不是

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

(这两个电话之间有很多微妙的,不那么微妙的差异,所以很大程度上取决于你需要这些电话的“功能”)

答案 2 :(得分:0)

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

  

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

答案 3 :(得分: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";