我有两个文件 tmp.pl 和 tmp2.pl。我想用 require 命令调用 tmp2.pl 但也发送一个参数。有没有更好的方法来做到这一点?
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
我有两个文件 tmp.pl 和 tmp2.pl。我想用 require 命令调用 tmp2.pl 但也发送一个参数。有没有更好的方法来做到这一点?
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
据我所知,require
不能用于发送参数。但这是一件好事,我认为,因为我想不出你应该这样做的理由。在我看来,你的设计是错误的。
tmp2.pl
应该是:
system
或qx()
但这只是我的想法....
可能有更好的方法来完成您想要做的任何事情,但是您可以通过类似的方式实现当前的子目标
{
local @_ = ("passed parameter");
require "tmp2.pl";
}
在我想从 perl 脚本中运行 perl 脚本的地方,我可能会考虑这个习惯用法。也就是说,我可以说
{
local @ARGV = ("foo","bar");
require "my_script.pl";
}
代替
system("perl","my_script.pl","foo","bar");
(这两个调用之间有很多微妙和不那么微妙的区别,所以很大程度上取决于您需要这些调用的哪些“功能”)
是的,我认为这应该有效。使用“require”来包含脚本。之后,您可以通过调用子函数来传递参数。修改后的脚本可以
require "tmp2.pl" ;
subfunc(parameter);
print @_;
假设您要执行其他程序并捕获其输出,我偏爱使用 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";