Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在子例程中正确运行Getopt::Long::GetOptions_Perl_Subroutine_Getopt Long - Fatal编程技术网

Perl 在子例程中正确运行Getopt::Long::GetOptions

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下管理备份会话

您好,我正在使用DebianLinux和Perl5.28,并尝试在子例程(类的方法)中运行

调用部分由toolkit对象$TK生成:

#用法: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