私はPerlを使用していますv5.16.2Perl文字列奇妙さ:等しい文字列が等しくない?
私はNet :: SMPPモジュールを使用しています。私はいくつかのデータを返します。 私は、このデータを表示した場合、私は(簡体字)これを取得:
今$VAR1 = bless({
'receipted_message_id' => '400002F6E09C61701222120140',
'30' => '400002F6E09C61701222120140'
}, 'Net::SMPP::PDU');
、のは、このデータは$ PDUにあると私はこれを行うと仮定してみましょう:
$message_id = $pdu->{30}; # or $pdu->{receipted_message_id}, same result
myfunction($message_id);
その後、私はMyFunctionのように定義されています:
sub myfunction {
my $message_id = shift;
my $message_id_static = '400002F6E09C61701222120140';
print Dumper($message_id);
print Dumper($message_id_static);
print hexdump($message_id);
print hexdump($message_id_static);
if ($message_id eq $message_id_static)
{
print "match\n";
}
else
{
print "no match\n";
}
}
プログラムの出力は次のようになります。
$VAR1 = '400002F6E09C61701222120140';
$VAR1 = '400002F6E09C61701222120140';
Data::Hexdumper: data length isn't an integer multiple of lines
so has been padded with NULLs at the end.
0x0000 : 34 30 30 30 30 32 46 36 45 30 39 43 36 31 37 30 : 400002F6E09C6170
0x0010 : 31 32 32 32 31 32 30 31 34 30 00 00 00 00 00 00 : 1222120140......
Data::Hexdumper: data length isn't an integer multiple of lines
so has been padded with NULLs at the end.
0x0000 : 34 30 30 30 30 32 46 36 45 30 39 43 36 31 37 30 : 400002F6E09C6170
0x0010 : 31 32 32 32 31 32 30 31 34 30 00 00 00 00 00 00 : 1222120140......
no match
私には分かりません...! $ message_idを使用してSQLiteクエリを実行しようとすると、悲惨なことに失敗します。代わりに$ message_id_staticを使用すると、完全に動作します。
これは奇妙な内部Perlバグですか、何か不足していますか? これは...時間私に
EDITナットを駆動されています。perlデバッガを使用して
を、私はこれを取得:
DB<3> x $message_id_static
0 '400002F6E09C61701222120140'
DB<4> x $message_id
0 "400002F6E09C61701222120140\[email protected]"
だから、少なくとも私は違いがある見ます文字列は、なぜhexdumpで見えないのですか?\ c @は何ですか?
ありがとうございます!
これはソースファイルのガベージではありませんか? –
'\ c @'は恐らくCtrl- @を表しています。これはヌル文字です。 Cはヌル文字をストリングの終了マーカーとして扱います。 Perlは一般的にそうではありませんが、*何かがnull文字を間違って扱っているようです。 –
SQLiteで '$ message_id'を使用すると、どのようなエラーが発生しますか?これは普通のスカラーテキストではなく、オブジェクト/ハッシュリファレンスです。あなたが貼り付けたコードは私のために働いていましたが、 '$ message_id'を持っていませんでした。問題を表示するためにhttps://stackoverflow.com/help/mcveを提供できますか? – Robert