perl 两个字符串输出相同但是比较失败
来源:互联网 发布:网络平台赌博游戏代理 编辑:程序博客网 时间:2024/04/29 22:21
今天写程序,遇到一个问题,有两个字符串用print输出来是一模一样,但是用eq匹配就是不成功。
sub login{ my @array = ""; my $username = ""; my $password = ""; open($FILE_FD, "<:encoding(UTF-8)", "/root/txt"); my %user = (); #保存所有用户名和密码键值对 while($line = <$FILE_FD>) { ($username, $password) = split(/ /, $line); chomp($password); $user{$username} = $password; } <strong>if( exists($user{$_[0]})) { $temp = $user{$_[0]}^$random; if( ($temp cmp $passwd) ==0 ) { print "login success\n"; return 0; } }</strong> print "invalide name or password\n"; return 1;}经过调试,发现加粗这段代码有错误,最后用print同时输出 $temp和 $passwd发现两个内容是一模一样的,但是用cmp或者eq就比较失败,于是在网上看有可能是打开文件时会有用不同的字符编码的方式打开文件导致数据不一致的问题,从而导致比较失败。于是给打开文件函数增加了open($FILE_FD, "<:encoding(UTF-8)", "/root/txt");但是经过分析,程序输入并没有中文字符或者特殊符号的输入,最后这种改进方法被排除。
最后几经周折才发现虽然打印出来的字符串看上去完全没有别的字符或者转义字符,但是确实是存在的。加上$temp =~ s/\W//g;这一句之后代码运行通过。
顺便解释一下$temp =~ s/\W//g; s表示替换匹配的部分,\W表示除过[0~9][A~Z][a~z]的字符,后面/表示替换为空,g表示全局出现的字符串。
第一次写东西。希望大家多改正改正。谢谢了!共同进步!
<span style="font-family:SimSun;"></span>
0 0
- perl 两个字符串输出相同但是比较失败
- 两个字符串比较是否相同
- perl比较两个文件,输出不同行
- Valid Anagram 比较两个字符串是否相同
- perl比较两个目录中的文件内容是否相同
- 翻转字符串和比较两个字符串是否相同
- JAVA试题:输出字符串中连续两个相同子串
- 用汇编语言写一个程序,比较两个字符串是否相同。
- Python 2.X 下,比较两个字符串是否相同
- 比较两个字符串,找出最大的相同子串
- 比较两个字符串的连接模式是否相同
- matlab之比较两个字符串前几位是否相同
- 两个字符串是否存在相同部分的比较
- C#中使用Equals()函数比较两个字符串是否相同
- perl脚本比较两个文件的相同行和不同行
- 相同长度字符串比较
- perl中字符串比较
- 比较两个文件是否相同
- NSTimer的开启关闭
- Android的Activity组件实战细节解析
- mongodb3.0 性能测试报告 三
- Java模拟异步消息的发送与回调
- Git 中对象模型和文件的详细视图
- perl 两个字符串输出相同但是比较失败
- AP 结帐
- vector入门
- 2013 阿里巴巴算法、数据工程师笔试题选解
- 一个简单接口的优化分析与实战
- 每个程序员需掌握的20个代码命名小贴士
- Linux的五个查找命令
- 3D效果-HTML+CSS
- hdu 1267 下沙的沙子有几粒?(卡特兰数 与1134思路相同)