解释以下Perl代码?

use*_*002 -1 perl

可以有人为我解释以下Perl代码吗?我认为它在Perl和我对Perl编程没有任何线索.请解释以下代码的作用?

$t = test(10);
sub test() {
  my $str = unpack("B32", pack("N",shift));
  $str2 = substr($str,16,length($str));
  return $str2;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 10

这里,这里这里分别记录pack,unpack和substr函数.

pack("N"...)将数字打包成四字节网络顺序表示.unpack("B32"...)将此打包数字解压缩为一串位(零和一).该substr调用采用该位串的后半部分(从第16位开始),表示原始32位数的低16位.

为什么这样做对我来说是一个谜.更简单,更快速的解决方案是在开始时处理低16位(注意小写"n"):

sub test($) {
  return unpack("B16", pack("n",shift));
}
Run Code Online (Sandbox Code Playgroud)

  • 或者可能不那么令人困惑的`return sprintf"%016b",shift&0xffff`,它使用你可以在其他语言中找到的运算符:) (2认同)