在子程序中运行 Getopt::Long::GetOptions 的正确方法

问题描述

嗨,我正在使用 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)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...