我想將encode_base64('test')
與包含'test'的base64字符串的字符串變量進行比較。問題是它永遠不會驗證!爲什麼Perl中的base64字符串比較失敗?
use MIMI::Base64 qw(encode_base64);
if (encode_base64("test") eq "dGVzdA==")
{
print "true";
}
我忘了什麼嗎?
我想將encode_base64('test')
與包含'test'的base64字符串的字符串變量進行比較。問題是它永遠不會驗證!爲什麼Perl中的base64字符串比較失敗?
use MIMI::Base64 qw(encode_base64);
if (encode_base64("test") eq "dGVzdA==")
{
print "true";
}
我忘了什麼嗎?
當您進行字符串比較並且意外失敗時,打印字符串以查看其中的實際內容。我把括號圍繞價值看到任何多餘的空格:
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", "")
這裏有一個有趣的技巧:使用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=='
和眼尖讀者會注意到兩者的區別確實是換行符。 :)
如果你想調試這一點,你需要輸出'encode_base64(「測試」)的值',而不是盲目地檢查它與另一個字符串相等。 – jtbandes
您可能想要查看http://stackoverflow.com/questions/49652/are-there-any-good-automated-test-suites-for-perl,而不是手動驗證您的測試。 – TrueWill