加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何比较Perl中的打包值?

发布时间:2020-12-15 22:04:52 所属栏目:大数据 来源:网络整理
导读:我想在Perl中使用 pack()函数来编码一些数据.然后我想将我的打包结构与另一个打包结构进行比较.我想比较这个打包结构的字节值. 根据文档,cmp使用当前区域设置来确定如何比较字符串.但我不希望任何情报应用于比较.我想要最接近memcmp()的东西.显然我不能使用
我想在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读