Chinaunix

标题: 关于grel函数的一个bug? [打印本页]

作者: SAS    时间: 2009-06-02 17:03
标题: 关于grel函数的一个bug?
如下的一段代码:

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函数的时候,如果希望把转义字符看做普通字符一样来处理要怎么弄?
为什么从文件读入的,和在程序中赋值的出现不一样的情况?
作者: Perl_Er    时间: 2009-06-02 17:17
在my ($tmp)=grep /$ttt/,@str2;前面加一句:$ttt= quotemeta( $ttt); 试一试
作者: SAS    时间: 2009-06-02 17:39
OK

谢了
作者: Perl_Er    时间: 2009-06-02 17:46
不要轻易断定说是perl的bug。 这明显是你写的程序的bug
作者: SAS    时间: 2009-06-02 17:47
这个函数兼容性不好。。。。。会对中文的字串也进行修改,导致乱码。。。。。。
作者: hitsubunnu    时间: 2009-06-03 08:54
原帖由 SAS 于 2009-6-2 17:47 发表
这个函数兼容性不好。。。。。会对中文的字串也进行修改,导致乱码。。。。。。


中国男足不行  不是球员的问题  而是球鞋有问题
作者: cobrawgl    时间: 2009-06-03 08:59
原帖由 hitsubunnu 于 2009-6-3 08:54 发表


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



据说是美国人在球上动手脚了,有后门!
作者: SAS    时间: 2009-06-03 12:07
我倒。。。。。。。。。。。。。。。。。。。。
作者: nsnake    时间: 2009-06-03 13:11
UTF8处理还是GB2312的方式处理
作者: Perl_Er    时间: 2009-06-03 13:17
标题: 回复 #9 nsnake 的帖子
两种都说一下!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2