我正在将一个 shell 脚本转换为一个使用 Getopt::Long 的 Perl 脚本,并且我想保持与以下情况的兼容性,如果脚本的唯一参数是单个文件,则该文件用作配置文件,而通常是将参数获取到 GetoptLong 中。
if [[ $# -eq 1 && -f $1 ]];
then
echo "Using config file $1"
[...]
else
if [ $# -lt 2 ]; then usage "INCORRECT NUMBER OF PARAMETERS"; fi
while getopts ":a:b:c:d:ef" opt;
do
[...]
一种选择是if/else
像这样在 Perl 脚本中维护 :
if (1 == @ARGV && -f $ARGV[0]) {
# use this config file
config_file_method($ARGV[0]);
} else {
# use GetOptions
GetOptions(
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
}
但我想知道这种特殊情况是否可以通过一些魔法包含在 GetOptions 函数中:
GetOptions(
'if only one element in @ARGV' => 'call config_file_method($ARGV[0])',
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
有任何想法吗?