【发布时间】:2014-06-24 16:06:12
【问题描述】:
我正在概括一个预先存在的 perl 脚本......即让它同时在多个实例上工作。基本上它是建模脚本的参数扫描功能。扫描只执行一个参数,我希望它全部完成。预先存在的脚本(如果您感兴趣,从 bionetgen 称为 scan_var.pl)有一堆参数 - 其中一些是可选的。
以下以默认设置成功实现参数扫描
#execute the parameter scan with each variable individually
foreach $var_name (@var_names){
my $param = shift @var_names;
system ("perl", $scan_var_location, $model, $param, $min_value, $max_value, $NPTS);
}
但现在我想使用GetOpt::Long 模块来解析可选参数。到目前为止,我的代码是:
# some default parameters
my $log = 0;
my $t_end = 20;
my $n_steps = 1;
my $steady_state = 0;
my $method = "\"ode\"";
my $verbose = 0;
my $prefix;
my $options = GetOptions (
'verbose' => \$verbose, #boolean
'log' => \$log, #boolean
'n_steps:i' => \$n_steps, #integer
'steady_state' => \$steady_state, #boolean
'method:s' => \$method, #string
't_end:i' => \$t_end, #integer
'prefix:s' => \$prefix string
);
#execute the parameter scan with each variable individually
foreach $var_name (@var_names){ #iterates through a list stored in $var_names(not shown for concise-ness)
my $param = shift @var_names;
system ("perl", $scan_var_location, #required value, directory
$options, #optional command line arguments - corresponds to the list above
$model, #required command line value (directory)
$param, #list iterated over
$min_value, #requierd integer
$max_value, #required integer
$NPTS #required integer
);
}
然而,这在某种程度上是不正确的。有人有更正的建议吗?
干杯
【问题讨论】:
-
总是
use strict; use warnings;!请更详细地描述您的问题。 -
如果您将
GetOptions的每个参数对放在单独的行上,您的代码将更具可读性并且更易于调试。就目前而言,您有'n_steps:i' => \ \$n_steps,并且额外的反斜杠是多余的。 -
Biffen - 使用严格和警告已打开,这只是我脚本的底部,因为要求人们阅读它太长了,(但无论如何感谢您的建议)。至于更多细节 - 我已经尝试过这样做,所以如果我使用可选参数,我的新脚本将在系统函数中自动使用它们。我想问题是有些是布尔值,而有些是数值。
标签: perl command-line system