我想在Perl中使用
pack()函数来编码一些数据.然后我想将我的打包结构与另一个打包结构进行比较.我想比较这个打包结构的字节值.
根据文档,cmp使用当前区域设置来确定如何比较字符串.但我不希望任何情报应用于比较.我想要最接近memcmp()的东西.显然我不能使用< =>比较我的打包对象,因为它们不是数字.
在Perl中比较打包字符串的最佳方法是什么?
旁注:我一直在阅读this article on efficient sorting in Perl,它注意到普通排序函数使用类似memcmp的算法来比较结构.我想知道如何在不使用sort的情况下实现这样的比较.
解决方法
禁用块的区域设置注意事项并像往常一样使用cmp:
sub mycmp { no locale; $_[0] cmp $_[1]; }
perlop文档提供
lt
,le
,ge
,gt
andcmp
use the collation (sort) order specified by the current locale ifuse locale
is in effect. See 07001.
然后在@L_301_4@
The default behavior is restored with the
no locale
pragma,or upon reaching the end of block enclosinguse locale
.
例如,跑步
my($one,$two) = map pack("N",$_) => 1,2; say mycmp($one,$two); say mycmp($two,$one);
-1 1