perl - 在子例程中运行 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)
推荐阅读
- java - Android Q Beta - 强类型权限
- java - 如何在数组中搜索一个数据集?
- c# - 如何从 Firebase 实时数据库获取 C# 中的标题?
- c# - 使用依赖注入调度 Quartz.net 作业
- java - 如何根据二维数组“地图”制作二维坐标数组
- c# - 在 AutoFac 中使用带有参数的 lambda 表达式注册通用类型
- javascript - 如何将 HTML 元素的文本设置为表单文本提交?
- html - 根据 html 文件设置窗口设置(通过图标属性)
- php - magento 2自定义日历而不是核心日历
- java - 文件上传到onedrive时触发java代码从onedrive下载文件