gpt4 book ai didi

perl - 如何比较 Perl 中的打包值?

转载 作者:行者123 更新时间:2023-12-03 03:30:20 24 4
gpt4 key购买 nike

我想使用 pack() Perl 中的函数对某些数据进行编码。然后我想将我的打包结构与另一个打包结构进行比较。我希望这个比较是针对这个打包结构的字节值。

根据文档,cmp使用当前区域设置来确定如何比较字符串。但我不希望将任何情报应用于比较。我想要最接近 memcmp() 的东西。显然我不能使用<=>用于比较我的包装对象,因为它们不是数字。

在 Perl 中比较打包字符串的最佳方法是什么?

旁注:我一直在阅读this article on efficient sorting in Perl其中指出,普通排序函数使用类似 memcmp 的算法来比较结构。我想知道如何在不使用排序的情况下实现这样的比较。

最佳答案

禁用该 block 的区域设置注意事项并照常使用 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 perllocale.

然后在 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);

输出

-11

关于perl - 如何比较 Perl 中的打包值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3288329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com