我试图将encode_base64('test')
与包含base64字符串'test'的字符串变量进行比较。问题是它永远不会验证!
use MIMI::Base64 qw(encode_base64);
if (encode_base64("test") eq "dGVzdA==")
{
print "true";
}
我忘了什么吗?
答案 0 :(得分:10)
Here's指向Perlmonks页面的链接,上面写着“注意encode_base64()编码字符串末尾的换行符”。
所以简单的'eq'可能会失败。
要取消换行符,请改为encode_base64("test", "")
。
答案 1 :(得分:8)
当您进行字符串比较并且意外失败时,请打印字符串以查看其中的实际内容。我在值周围放置括号以查看任何额外的空格:
use MIME::Base64;
$b64 = encode_base64("test");
print "b64 is [$b64]\n";
if ($b64 eq "dGVzdA==") {
print "true";
}
这是使用有史以来发明的最佳调试器的基本调试技术。习惯了很多使用它。 :)
此外,有时您需要阅读文档以了解一些事情以捕获重要部分。在这种情况下,MIME::Base64告诉您encode_base64
有两个参数。第二个参数是行结尾,默认为换行符。如果你不想在字符串的末尾添加换行符,你需要给它另一行结尾,例如空字符串:
encode_base64("test", "")
答案 2 :(得分:0)
这是一个有趣的提示:使用Perl精彩且备受喜爱的测试模块进行调试。这不仅可以让您在测试方面领先一步,而且有时它们会使您的调试输出更快。例如:
#!/usr/bin/perl
use strict;
use warnings;
use Test::More 0.88;
BEGIN { use_ok 'MIME::Base64' => qw(encode_base64) }
is( encode_base64("test", "dGVzdA==", q{"test" encodes okay} );
done_testing;
使用perl
或prove
运行该脚本,它不会只是告诉您它不匹配,它会说:
# Failed test '"test" encodes okay' # at testbase64.pl line 6. # got: 'gGVzdA== # ' # expected: 'dGVzdA=='敏锐的读者会注意到两者之间的区别确实是换行符。 :)