perl 两个字符串输出相同但是比较失败

今天写程序,遇到一个问题,有两个字符串用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>


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值