微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何比较Perl中的打包值?

我想在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 and cmp use the collation (sort) order specified by the current locale if use locale is in effect. See 07001.

然后在perllocale

The default behavior is restored with the no locale pragma,or upon reaching the end of block enclosing use locale.

例如,跑步

my($one,$two) = map pack("N",$_) => 1,2;
say mycmp($one,$two);
say mycmp($two,$one);

输出

-1
1

原文地址:https://www.jb51.cc/Perl/171338.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐