我有兩個文件tmp.pl和tmp2.pl.我想用require命令調用tmp2.pl,但也發送一個參數。有沒有更好的方法來做到這一點?在Perl中使用必需的命令將參數傳遞給腳本
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
我有兩個文件tmp.pl和tmp2.pl.我想用require命令調用tmp2.pl,但也發送一個參數。有沒有更好的方法來做到這一點?在Perl中使用必需的命令將參數傳遞給腳本
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
有可能是一個更好的方式來完成不管它是你正在試圖做的,但你可以用類似
{
local @_ = ("passed parameter");
require "tmp2.pl";
}
實現當前的子目標,我會在我想跑的地方考慮這個成語perl腳本中的perl腳本。也就是說,我可以說
{
local @ARGV = ("foo","bar");
require "my_script.pl";
}
,而不是
system("perl","my_script.pl","foo","bar");
(有大量的這兩個電話之間的微妙和不那麼微妙的差異,所以在很大程度上取決於什麼「特色」這些電話你需要)
據我所知,require
不能用於發送的參數。但我認爲這是一件好事,因爲我想不出你應該想要的理由。在我看來,你的設計是錯誤的。
tmp2.pl
應該是:
system
或qx()
但這只是我的想法....
是的,我認爲這應該工作。使用「require」來包含腳本。之後,您可以通過調用子函數來傳遞參數。修改後的腳本可以
require "tmp2.pl" ;
subfunc(parameter);
print @_;
假設要執行其他程序並捕獲它的輸出我偏愛使用IPC ::運行模塊。
#!/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";