为什么Perl中的base64字符串比较失败?

Bob*_*Bob 4 perl base64

我试图比较一个encode_base64('test')包含base64字符串'test'的字符串变量.问题是它永远不会验证!

use MIMI::Base64 qw(encode_base64);

if (encode_base64("test") eq "dGVzdA==")
{
    print "true";
}
Run Code Online (Sandbox Code Playgroud)

我忘了什么吗?

pav*_*ium 10

这是一个Perlmonks页面的链接,上面写着"注意encode_base64()编码字符串末尾的换行符".

所以简单的'eq'可能会失败.

要取消换行符,请说明encode_base64("test", "").


bri*_*foy 8

当您进行字符串比较并且意外失败时,请打印字符串以查看其中的实际内容.我在值周围放置括号以查看任何额外的空格:

use MIME::Base64;

$b64 = encode_base64("test");

print "b64 is [$b64]\n";

if ($b64 eq "dGVzdA==") {
   print "true";
}
Run Code Online (Sandbox Code Playgroud)

这是使用有史以来最好的调试器的基本调试技术.习惯了很多使用它.:)

此外,有时您需要阅读文档以获取一些时间来捕获重要部分.在这种情况下,MIME :: Base64告诉您encode_base64采用两个参数.第二个参数是行结尾,默认为换行符.如果您不想在字符串末尾添加换行符,则需要为其指定另一行结尾,例如空字符串:

encode_base64("test", "")
Run Code Online (Sandbox Code Playgroud)