免费注册 查看新帖 |

Chinaunix

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

关于grel函数的一个bug? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-02 17:03 |只看该作者 |倒序浏览
如下的一段代码:

open(OLD_REC_FILE,"./test.1") || print ("不能读取./test.1文件!\n");
        my (@old_rec)=<OLD_REC_FILE>;
        close OLD_REC_FILE;
        chomp(@old_rec);
       
open(NEW_REC_FILE,"./test.2") || print ("不能读取./test.2文件!\n");
        my (@new_rec)=<NEW_REC_FILE>;
        close NEW_REC_FILE;
        chomp(@new_rec);
       
my (@cy)=s_check_sz(1,\@old_rec,\@new_rec);
foreach my $tmp (@cy)
{
        print "========$tmp\n";
}

sub s_check_sz
{
        my ($tmp,$tmp1,$tmp2)=@_;
        my (@retur_num);
      
                foreach my $tp1 (@$tmp1)
                {
                        print "~~~~~~tp1==$tp1\n";
                        my ($sz_nu)=grep /$tp1/,@$tmp2;
                        print "-----------sz_nu==$sz_nu\n";
                        if (!$sz_nu )
                        {
                                push (@retur_num,$tp1);
                        }
                }
               return @retur_num;
}

test.1 test.2文件内容如下:
$cat N2000.1
1,0,分区=D:\,aaa
2524
$ cat N2000.2
1,0,分区=D:\,aaa
2524
运行后结果如下:
./test.pl  
~~~~~~tp1==1,0,分区=D:\,aaa
-----------sz_nu==
~~~~~~tp1==2524
-----------sz_nu==2524
========1,0,分区=D:\,aaa
运行后的结果希望是
./test.pl  
~~~~~~tp1==1,0,分区=D:\,aaa
-----------sz_nu==1,0,分区=D:\,aaa
~~~~~~tp1==2524
-----------sz_nu==2524
========

目前已经确认是D:\,的"\"符号引起来的,但是不从文件中读取,直接在数组中定义:
push @str1,"xxxx,中文=C:\,cccc";
push @str2,"xxxx,中文=C:\,cccc";
push @str1,"xxxxx";
push @str2,"xxxxx";
foreach my $ttt (@str1)
{
my ($tmp)=grep /$ttt/,@str2;
print "########$tmp\n";
}

显示的是
########xxxx,中文=C:,cccc
########xxxxx

在使用grep函数的时候,如果希望把转义字符看做普通字符一样来处理要怎么弄?
为什么从文件读入的,和在程序中赋值的出现不一样的情况?

论坛徽章:
0
2 [报告]
发表于 2009-06-02 17:17 |只看该作者
在my ($tmp)=grep /$ttt/,@str2;前面加一句:$ttt= quotemeta( $ttt); 试一试

论坛徽章:
0
3 [报告]
发表于 2009-06-02 17:39 |只看该作者
OK

谢了

论坛徽章:
0
4 [报告]
发表于 2009-06-02 17:46 |只看该作者
不要轻易断定说是perl的bug。 这明显是你写的程序的bug

论坛徽章:
0
5 [报告]
发表于 2009-06-02 17:47 |只看该作者
这个函数兼容性不好。。。。。会对中文的字串也进行修改,导致乱码。。。。。。

论坛徽章:
0
6 [报告]
发表于 2009-06-03 08:54 |只看该作者
原帖由 SAS 于 2009-6-2 17:47 发表
这个函数兼容性不好。。。。。会对中文的字串也进行修改,导致乱码。。。。。。


中国男足不行  不是球员的问题  而是球鞋有问题

论坛徽章:
0
7 [报告]
发表于 2009-06-03 08:59 |只看该作者
原帖由 hitsubunnu 于 2009-6-3 08:54 发表


中国男足不行  不是球员的问题  而是球鞋有问题



据说是美国人在球上动手脚了,有后门!

论坛徽章:
0
8 [报告]
发表于 2009-06-03 12:07 |只看该作者
我倒。。。。。。。。。。。。。。。。。。。。

论坛徽章:
0
9 [报告]
发表于 2009-06-03 13:11 |只看该作者
UTF8处理还是GB2312的方式处理

论坛徽章:
0
10 [报告]
发表于 2009-06-03 13:17 |只看该作者

回复 #9 nsnake 的帖子

两种都说一下!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP