我有两个文件tmp.pl和tmp2.pl.我想用require命令调用tmp2.pl,但也发送一个参数。有没有更好的方法呢?
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
答案 0 :(得分:4)
据我所知,require
不能用于发送参数。但我认为这是一件好事,因为我无法想到你应该想要的原因。在我看来你的设计是错误的。
tmp2.pl
应该是:
system
或qx()
但这只是我的想法......
答案 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";