免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2408 | 回复: 6
打印 上一主题 下一主题

Getopt参数不正确怎么退出? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 17:12 |只看该作者 |倒序浏览
比如说,对于
GetOptions('a=s'=>\$opt_a);
如果运行时只加了 -a,而没在 -a后面加上一个string,运行之后只会报一个warning,程序其实还是能继续往后运行的 。
能不能或者有没有办法,在参数不正确时,让程序退出?
怕没描述清,再描述一点:
如果加了-a,并且在-a之后无string时,退出。
如果没加-a,仍旧正常运行,不退出。

请高手帮忙,谢谢~

论坛徽章:
0
2 [报告]
发表于 2011-12-21 10:31 |只看该作者
那你就判断有没有string咯

论坛徽章:
1
丑牛
日期:2014-02-14 17:07:04
3 [报告]
发表于 2011-12-21 10:54 |只看该作者
  1. my $succ = Getopt::Long::GetOptions('a=s'=>\$opt_a);
  2. unless ($succ && $opt_a)
  3. {        
  4.         print "\nUsage: $0 -a <opt_a>\n\n";
  5.         exit 0;   
  6. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-12-21 11:34 |只看该作者
ace_fei 发表于 2011-12-21 10:54

可能我没表达好。我的意思是,在运行脚本时,-a这个选项是可有可无的。
如果没有加-a,则正常向后运行。
如果有了-a,则后面必须加一个string才可以向后运行,如果无string,则报错退出。

假设脚本的名字是1221,例子如下:

>1221 -a
此时要报错退出,因为-a后没有加string。

>1221 -a abc
此时可以正常向后运行。

>1221
此时也可以正常向后运行。

论坛徽章:
0
5 [报告]
发表于 2011-12-21 11:37 |只看该作者
Perl_Er 发表于 2011-12-21 10:31
那你就判断有没有string咯

用shift @ARGV当然是可以的,不过这样不是比较笨嘛。。。
我就想在GetOptions()中能不能有判断,当某一需要后续string的选项出现时,则必然要求有对应的string才可以,否则报错。如果此选项没出现,那就正常继续运行。

论坛徽章:
1
丑牛
日期:2014-02-14 17:07:04
6 [报告]
发表于 2011-12-21 17:04 |只看该作者
  1. #!/usr/bin/perl
  2. use Getopt::Long;
  3. if (@ARGV % 2)
  4. {
  5.     print "Error!";
  6.         exit 1;
  7. }
  8. else
  9. {
  10.         Getopt::Long::GetOptions('a=s'=>\$opt_a);
  11. }

  12. print "Completion!";
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-12-21 19:44 |只看该作者
ace_fei 发表于 2011-12-21 17:04

好吧,你赢了。。。{:3_194:}
但是如果同时还可能会有另一个选项-b呢,而且-b后不要求有参数。-b是否出现也是不一定的。
这要怎么解决。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP