Perl 在子例程中正确运行Getopt::Long::GetOptions
您好,我正在使用DebianLinux和Perl5.28,并尝试在子例程(类的方法)中运行 调用部分由toolkit对象$TK生成:Perl 在子例程中正确运行Getopt::Long::GetOptions,perl,subroutine,getopt-long,Perl,Subroutine,Getopt Long,您好,我正在使用DebianLinux和Perl5.28,并尝试在子例程(类的方法)中运行 调用部分由toolkit对象$TK生成: #用法:CLI的帮助、人员和版本 我的美元是旗帜显示手册页 我的美元很有用标志显示帮助页 我的美元超过了旗帜展示版 #CLI的变量 我的$OUTPUT;#用于管理操作状态的IPC变量 我的$RESPONSE;#IPC变量,用于说明响应类型信息、警告、错误。。。 我的$COMMAND;#用于在此工具中寻址例程的当前命令 我的$BCK_NAME;#在ID下管理备份会话
#用法:CLI的帮助、人员和版本
我的美元是旗帜显示手册页
我的美元很有用标志显示帮助页
我的美元超过了旗帜展示版
#CLI的变量
我的$OUTPUT;#用于管理操作状态的IPC变量
我的$RESPONSE;#IPC变量,用于说明响应类型信息、警告、错误。。。
我的$COMMAND;#用于在此工具中寻址例程的当前命令
我的$BCK_NAME;#在ID下管理备份会话的名称
我的$ARC#U尺码;#预期存档大小的大小
我的$TAPE_尺寸;#预期磁带卷的大小
我的$WORK_PATH;#工作路径规范通常由$ENV{TOOL_BACKUP}给出
#将参数读入变量
$TK->parseCommandline(
{
“command | c=s”=>\$command,
“help | h”=>\$是帮助,
“男人| m”=>\$IS|u男人,
“version | v”=>\$IS版本,
“输出| o=s”=>\$output,
“response | r=s”=>\$response,
“备份名称| B=s”=>\$BCK\U名称,
'磁带大小| T=s'=>\$tape\u大小,
'存档大小| A=s'=>\$ARC\U大小,
“工作路径| W=s”=>\$work\U路径,
}
);
类$TK应使用定义良好的错误退出过程和canocical输出运行命令行解析器(方法)。错误捕获工作正常。但我无法使用有效的开关获取CLI参数
子语法分析命令行($$){
我的($self,$opt)=@;
#捕获GetOptions引发的错误
我的$sigFun=$SIG{{uuuuuuuuuuuu};
我的@errs=();
$SIG{{uuuuuuuuuuuuuuuu}=sub{
我的$msg=shift;
咀嚼(味精);
推送(@errs,$msg);
};
#转储预定义的开关
打印转储程序($opt);
#获取选项
获取选项($opt)
或exitFatalConfig($self,
加入(;\n,@errs)。“!”;
#恢复警告
$SIG{{uuuuu WARN}=$sigFun;
#进入init运行时模式
$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
IO.MAGIC:TEST.TOOL.V1.2
IO.COMMAND:./Test App-o Test.VARIABLE
$VAR1={
'磁带大小| T=s'=>\undef,
'备份名称| B=s'=>\undef,
'输出| o=s'=>\undef\undef,
'响应| r=s'=>\unde,
'help | h'=>\unde,
'man | m'=>\unde,
'version | v'=>\unde,
'命令| c=s'=>\unde,
'存档大小| A=s'=>\undef
};
EOF.TEST.TOOL.V1.2
状态:失败
程序:/测试应用程序
消息:未知选项:o!
EOF状态
这段代码有什么问题?GetOptions($opt)
应该是
GetOptions(%$opt)
GetOptions($opt)
应该是
GetOptions(%$opt)
谢谢,它很有效,很简单。播客里有这个话题吗?我只在“从任意数组解析选项”中找到了一些内容,其中提到了$ret=GetOptions(\%opts,…)
在参数转换方面,作为$opts.Re“POD中是否包含主题?”性质的提示,文档中到处都有。您在文档中看到的第一件事是GetOptions(“length=i”=>\$length,“file=s”=>\$data,“verbose”=>\$verbose)
。但那不是你要通过的。您没有传递这样的内容,而是传递了一个标量(对哈希的引用)。通过将哈希引用作为第一个(也是唯一一个)参数传递,您使用的是“将选项值存储在哈希中”(GetOptions(\%h,'length=i','file=s','verbose')中记录的方法,除了hash ref后面的选项定义为零之外。这就是为什么它不能识别-o
。谢谢,它能工作,很简单。播客里有这个话题吗?我只在“从任意数组解析选项”中找到了一些内容,其中提到了$ret=GetOptions(\%opts,…)
在参数转换方面,作为$opts.Re“POD中是否包含主题?”性质的提示,文档中到处都有。您在文档中看到的第一件事是GetOptions(“length=i”=>\$length,“file=s”=>\$data,“verbose”=>\$verbose)
。但那不是你要通过的。您没有传递这样的内容,而是传递了一个标量(对哈希的引用)。通过将哈希引用作为第一个(也是唯一一个)参数传递,您使用的是“将选项值存储在哈希中”(GetOptions(\%h,'length=i','file=s','verbose')中记录的方法,除了hash ref后面的选项定义为零之外。这就是为什么它不能识别-o
。