问题描述
嗨,我正在使用 Debian Linux 和 Perl 5.28,并尝试在子例程(类的方法)中运行。
调用部分由工具包对象 $TK 生成:
# Usage sugar: help,man and version for the CLI
my $IS_MAN; # Flag show man page
my $IS_HELP; # Flag show help page
my $IS_VER; # Flag show version
# Variables for the CLI
my $OUTPUT; # IPC Variable to manage an operation status
my $RESPONSE; # IPC Variable to state a response type INFO,WARN,ERROR...
my $COMMAND; # Current command to address a routine in this tool
my $BCK_NAME; # Name to manage the backup session under an ID
my $ARC_SIZE; # Size of the expected archive size
my $TAPE_SIZE; # Size of the expected tape volume
my $WORK_PATH; # Work path canonical usually given by $ENV{TOOL_BACKUP}
# Read the param's into vars
$TK->parseCommandline(
{
"command|c=s" => \$COMMAND,"help|h" => \$IS_HELP,"man|m" => \$IS_MAN,"version|v" => \$IS_VER,"output|o=s" => \$OUTPUT,"response|r=s" => \$RESPONSE,"backup-name|B=s" => \$BCK_NAME,'tape-size|T=s' => \$TAPE_SIZE,'archive-size|A=s' => \$ARC_SIZE,'work-path|W=s' => \$WORK_PATH,}
);
$TK 类将运行命令行解析器(方法),并带有明确定义的错误退出程序和规范输出。错误捕获效果很好。但是我无法使用有效的开关获取 CLI 参数。
sub parseCommandline($$) {
my ($self,$opt) = @_;
# Catch errors thrown by GetOptions
my $sigFun = $SIG{__WARN__};
my @errs =();
$SIG{__WARN__} = sub {
my $msg = shift;
chomp($msg);
push( @errs,$msg );
};
# Dump the predefined switches
print Dumper($opt);
# Get the options
GetOptions( $opt)
or exitFatalConfig($self,join( ";\n",@errs ) . "!");
# Restore the warnings
$SIG{__WARN__} = $sigFun;
# Go into init-runtime mode
$self->runtime->{+KEY_COMMAND} = 'init-runtime';
}
尽管启用了 -o 选项,该方法始终会标记错误。
IO.MAGIC: TEST.TOOL.V1.2
IO.COMMAND: ./Test-App -o TEST.VARIABLE
$VAR1 = {
'tape-size|T=s' => \undef,'backup-name|B=s' => \undef,'output|o=s' => \undef,<------ HERE
'work-path|W=s' => \undef,'response|r=s' => \undef,'help|h' => \undef,'man|m' => \undef,'version|v' => \undef,'command|c=s' => \undef,'archive-size|A=s' => \undef
};
EOF.TEST.TOOL.V1.2
STATUS: FAILED
PROGRAM: ./Test-App
MESSAGE: Unknown option: o!
EOF.STATUS
这段代码有什么问题?
解决方法
GetOptions( $opt)
应该
GetOptions(%$opt)