在perl脚本中,我在调用脚本时使用Getopt::Long
来解析命令行选项。
现在,我想添加一个选项-%
:
die unless GetOptions (
'x=i' => \my $x,
'y:i' => \my $y,
'z' => \my $z,
'%' => \my $percent
);
然而,这导致Error in option spec: "%"
。我当然可以使用'pct' => \my $percent
代替'%' => \my $percent
,但我觉得-%
的助记符值更高。
那么,Getopt::Long
以某种方式,我想要的可能吗?或者是否有其他选项解析器模块可以执行我想要的操作?
答案 0 :(得分:3)
我强烈建议不要使用-%
作为选项...通常的做法是使用62个可用的单个字符或更详细的长选项中的任何一个。
无论如何-%
意味着什么?它或多或少是一种' 单位'其中需要处理另一个参数或选项?
draw_rect .... --opacity 0.75 # for a range between 0 .. 1.000
draw_rect .... --opacity 75 % # for a range between 0 .. 100.0
calculate_new_prices --discount 3.50 USD # for $3,50 less ?
calculate_new_prices --discount 3.50 EUR # for €3,50 less ?
calculate_new_prices --discount 3.50 # for 3,50 discount in .... ?
calculate_new_prices --discount 35.0 % # for 35.00 % offers ?
Getopt :: Long知道如何处理具有多个值的选项,只需将其传递给ArrayRef:
GetOptions (
...
'discount{1,2} => \@discount,
...
);
如果它真的是一个'开关'然后它可能意味着某些东西是“相对的”。别的,只需使用更详细的选项,说明......" 它的相对"而不是" 这是一个百分号 - " ....
my_script .... --relative
圣诞快乐
答案 1 :(得分:2)
解决方法可能是使用ARGV
代替%
替换p
的简单预处理:
use strict;
use warnings;
use Getopt::Long;
my $substitute_for_percent = 'p';
$_ =~ s/^-%/-$substitute_for_percent/ for (@ARGV);
GetOptions (
'z' => \my $z,
$substitute_for_percent => \my $percent
) or die;
答案 2 :(得分:0)
从Getopt::Long
版本2.39开始,字符可能是别名,但这些字符不能出现在Perl标识符中,所以这是可能的:
use warnings;
use strict;
use Getopt::Long;
my $percent = 100;
die unless GetOptions (
'percent|%=f' => \$percent
);
print "\n $percent%\n\n";
然后调用它
$ perl script.pl -% 5.4