免费注册 查看新帖 |

Chinaunix

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

请教一个判断@ARGV的问题  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-29 16:13 |只看该作者 |倒序浏览
#!/usr/bin/perl

use strict;
use warnings;
my @list = "ls /var/www/apps";

$ARGV[0] or die "usage:line.pl start|stop|restart dirs\n";
$ARGV[1] or die "no dir\n";


if ($ARGV[0] ne "start" or "stop" or "restart") {
    print "usage again!";
}

foreach (@list) {
    if ($ARGV[1] ne "$_") {
    print "wrong dir";
    }
}

这是代码
文件名是test.pl

apps下有 a b c d 4个空文件夹 用来做判断的

# ./line.pl restart a
usage again!
wrong dir

怎么对比 最后那个都是wrong dir
perl这么处理@ARGV后面那个第一和第二个参数的?分隔符貌似不是空格? 我估计是这个原因...我单打retsart 跳出正确信息...但是 只要多加一个参数@ARGV[1] 就出问题
然后下面一个foreach内的if出错..估计是没拿到那个参数 或者拿到错误参数 判断错误..请大牛指教...

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-07-29 16:29 |只看该作者
原帖由 cxfcxf 于 2009-7-29 16:13 发表
#!/usr/bin/perl

use strict;
use warnings;
my @list = "ls /var/www/apps";

把最后一句的 "ls /var/www/apps" 换成 glob "/var/www/apps/*".

[ 本帖最后由 MMMIX 于 2009-7-29 16:30 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-07-29 16:29 |只看该作者
my @list = "ls /var/www/apps";   #只是把"ls /var/www/apps"这个字串赋给数组list

if ($ARGV[0] ne "start" or "stop" or "restart") {  #这个太想当然了。。。。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-07-29 16:32 |只看该作者
原帖由 iceberg77 于 2009-7-29 16:29 发表

if ($ARGV[0] ne "start" or "stop" or "restart") {  #这个太想当然了。。。。

合法的语句,虽然达不到楼主期望的效果。

论坛徽章:
0
5 [报告]
发表于 2009-07-29 17:00 |只看该作者
与@ARGV一毛钱关系都没有
完全是程序太烂

论坛徽章:
0
6 [报告]
发表于 2009-07-30 03:50 |只看该作者
谢谢版主
不好意思 那个是我打错了 本来用的是``
但是其实还是有问题

@list = glob "/var/www/apps/*";
foreach (@list) {
    if ("/var/www/apps/$ARGV[0]" ne "$_") {
         print "wrong dir";
         last;
}

这样出来 还是有问题 不管怎么都匹配不上
不知道哪里问题

那个strat or stop or restart 可以用正则解决....当时没想起来...


ps 楼上 你妈没教你说人话么 只会用"毛"?
我又没说肯定这个问题 你不会像人家那样回复 就不要回
我邻居已经养狗了 不要在cu上还来听动物叫 谢谢

[ 本帖最后由 cxfcxf 于 2009-7-30 06:20 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2009-07-30 09:27 |只看该作者
原帖由 cxfcxf 于 2009-7-30 03:50 发表
@list = glob "/var/www/apps/*";
foreach (@list) {
    if ("/var/www/apps/$ARGV[0]" ne "$_") {
         print "wrong dir";
         last;
}

这样出来 还是有问题 不管怎么都匹配不上
不知道哪里问题

这个你在 if 之前把 "/var/www/apps/$ARGV[0]" 和 "$_" 打印出来看看不就清楚了?

论坛徽章:
0
8 [报告]
发表于 2009-07-30 10:16 |只看该作者
在foreach循环里,加一句
chomp($_);

./line.pl restart a
后面跟的两个参数是用空格分开的,你写的是对的

论坛徽章:
0
9 [报告]
发表于 2009-07-30 10:35 |只看该作者
原帖由 MMMIX 于 2009-7-30 09:27 发表

这个你在 if 之前把 "/var/www/apps/$ARGV[0]" 和 "$_" 打印出来看看不就清楚了?

打印过了才问的....一模一样...
development:~# ./line.pl start c
/var/www/apps/c
/var/www/apps/a

/var/www/apps/c
/var/www/apps/b

/var/www/apps/c
/var/www/apps/c

/var/www/apps/c
/var/www/apps/d

只答应 第一行是ARGV[1] 第二行是$_  然后循环...应该在第三次循环的时候 匹配..结果还是输出错误...

楼上的 使用了chomp($_); 没用

下面是全部代码

#!/usr/bin/perl


use strict;
use warnings;
my @list = glob "/var/www/apps/*";

$ARGV[0] or die "usage:line.pl start|stop|restart dirs\n";
$ARGV[1] or die "no dir\n";


if ($ARGV[0] =~ /start|stop|restart/) {
}else{
    print "usage again!\n";
}

foreach (@list) {
#    chomp($_);

#    print "/var/www/apps/$ARGV[1]\n";

#    print "$_\n";

#    print "\n";

    if ("/var/www/apps/$ARGV[1]" ne "$_") {
    print "wrong dir\n";
    last;
    }
}

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2009-07-30 10:56 |只看该作者
原帖由 cxfcxf 于 2009-7-30 10:35 发表

打印过了才问的....一模一样...
development:~# ./line.pl start c
/var/www/apps/c
/var/www/apps/a

把你执行过的代码原封不动的贴上来,而不要贴一个修改版
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP