免费注册 查看新帖 |

Chinaunix

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

字符串比较的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-07 11:50 |只看该作者 |倒序浏览
#!/usr/bin/perl -w
use strict;

my $mac = `ifconfig|perl -n -e 'if(/HWaddr (.*)/) {print \$1,qq(\n);}'`;

        my $one=$mac;
        $one =~ s/:/\./g;
        my $readmac = `cat /home/nfsroot/opt/factory/$one`;

       print "mac: $one\n";
       print "readmac: $readmac\n";

                                                         
if ($one =~ /^$readmac$/i) {
        print "register OK!\n";
        }else {
        print "unregisted or register failed!\n";
}
打印出来的$one和$readmac看上去是相同的; 可是在if语句中没有得到预料的结果,希望大虾不吝赐教。谢谢

论坛徽章:
0
2 [报告]
发表于 2006-12-07 12:04 |只看该作者
my $readmac = `cat /home/nfsroot/opt/factory/$one`;

后面加一句:
chomp $readmac;

论坛徽章:
0
3 [报告]
发表于 2006-12-07 13:07 |只看该作者
原帖由 whizchen 于 2006-12-7 12:04 发表
my $readmac = `cat /home/nfsroot/opt/factory/$one`;

后面加一句:
chomp $readmac;

多谢提醒,我同时也在my $one=$mac;前面加了chomp  $mac;
运行一下,还是不行,多余的换行符应该没有了。
输出:
[root@localhost ~]# ./get_mac.pl
mac: 00.C0.9F.C5.97.49  
readmac: 00.C0.9F.C5.97.49
unregisted or register failed!

论坛徽章:
0
4 [报告]
发表于 2006-12-07 13:15 |只看该作者
我试着在print "readmac: $readmac\n"; 下面添加以下2行
  1. my $res = $one cmp $readmac;
  2. print "res:$res\n";
复制代码

结果为: 1,$one > $readmac
原因还没有找到

另外:
如果把cmp替换为eq或ne,得到的结果分别为:空和1

[ 本帖最后由 qinxianjun 于 2006-12-7 13:36 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-12-07 15:02 |只看该作者
#!/usr/bin/perl
use warnings;
use strict;
my $one = '  00.C0.9F.C5.97.49 ';
my $readmac = '00.C0.9F.C5.97.49 ';
$one = &trim($one);
$readmac = &trim($readmac);
if ($one =~ /^\Q$readmac\E\s*?$/i) {
        print "register OK!\n";
}else {
        print "unregisted or register failed!\n";
}

sub trim {
        my $t = shift;
        $t =~ s/^\s+|\s+$//g;
        return $t;
}

[ 本帖最后由 Namelessxp 于 2006-12-7 15:08 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2006-12-07 15:25 |只看该作者
题外话,
  1.        print "mac: $one\n";
  2.        print "readmac: $readmac\n";
复制代码

这种写法很不专业,一看就是没吃过亏的,我不论是什么语言,一般都是
  1.        print "mac: [$one]\n";
  2.        print "readmac: [$readmac]\n";
复制代码

这样子。

论坛徽章:
0
7 [报告]
发表于 2006-12-07 15:30 |只看该作者
原帖由 Namelessxp 于 2006-12-7 15:02 发表
$one =~ /^\Q$readmac\E$/i

我把模式匹配那行/i前面的$去掉就能得到结果了,像  $one =~ /^$radmac/i

Namelessxp兄的方法去掉后面那个$也可以;

谁能帮忙解释一下原因么? 为什么eq得到结果为“空”这应该说明$one和$readmac不相等

论坛徽章:
0
8 [报告]
发表于 2006-12-07 15:34 |只看该作者
多谢大家,特别谢谢flw、Namelessxp,终于知道咋回事儿了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2006-12-07 15:34 |只看该作者
原帖由 qinxianjun 于 2006-12-7 15:30 发表

为什么eq得到结果为“空”这应该说明$one和$readmac不相等

看 6 楼

论坛徽章:
0
10 [报告]
发表于 2006-12-07 15:36 |只看该作者
这种写法很不专业,一看就是没吃过亏的,我不论是什么语言,一般都是

这下我是吃到了,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP