我正在使用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错误,或者我错过了什么? 这已被我逼疯了好几个小时......
编辑:
使用Perl调试,我得到这个:
DB<3> x $message_id_static
0 '400002F6E09C61701222120140'
DB<4> x $message_id
0 "400002F6E09C61701222120140\[email protected]"
所以,至少我看到有一个区别字符串,但是为什么它不被hexdump看到,那是什么\ c @?
谢谢!
难道这不是垃圾在源文件? –
'\ c @'可能是Ctrl- @的表示,它是空字符。 C将空字符视为字符串结束标记。 Perl通常不会,但*某些*似乎是错误地处理空字符。 –
在SQLite中使用'$ message_id'时会出现什么错误?任何机会这不是一个简单的标量文本,而是一个对象/哈希引用?你粘贴的代码为我工作,但它没有'$ message_id'。你能否提供https://stackoverflow.com/help/mcve来显示问题? – Robert