Perl中的校验和

Perl中的校验和,perl,checksum,Perl,Checksum,我是一名java开发人员,我需要理解一些perl代码,并需要将其转换为java。下面是片段 my @var = map hex,split //,A8F000000F4241; my $sum=0; # calculate checksum of odd bytes and twisted even bytes $sum-=$_ for map((0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15)[$_], @var[0,2,4,6,8,10,12]), @va

我是一名java开发人员,我需要理解一些perl代码,并需要将其转换为java。下面是片段

my @var = map hex,split //,A8F000000F4241;
my $sum=0;
# calculate checksum of odd bytes and twisted even bytes    
$sum-=$_ for map((0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15)[$_], @var[0,2,4,6,8,10,12]), @var[1,3,5,7,9,11,13];       
print $sum ; 

我真的很难理解它在第四行做什么。任何帮助都将不胜感激。

脚本应改写为:

#!/usr/bin/perl
use Modern::Perl;
use Data::Dump qw(dump);

# Split the string into a list of all character
my @elem = split //, 'A8F000000F4241';
dump @elem;

# convert each element to a hexadecimal number
my @var = map hex, @elem;
dump @var;

# list all number between 0 and 15, even then odd
my @numbers = (0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15);

# >Pick number in @numbers at position defined in @var (even position in @var)
my @l = map($numbers[$_], @var[0,2,4,6,8,10,12]);
dump@l;

# initialization
my $sum=0;

# loop on the two arrays 
for (@l, @var[1,3,5,7,9,11,13]) {
  $sum -= $_ ;
}
print $sum ; 

这对您来说更清楚吗?

您的perl代码不完整;它设置一个标量
$var
,但随后读取一个数组
@var
;它们是两种不同的东西,你看。更正。那也不对。它设置一个元素数组,但使用14个元素。你能给我们看一下你想理解的实际的、有效的代码片段吗?对不起。再次更正。希望它现在是正确的。谢谢,明白了!这样好多了。非常感谢。非常感谢你的帮助@Toto,我投了赞成票,但看到“ThisPerl应该是…”可能更好地写为“ThisPerl可能是…”否则你会做出/暗示一个风格断言,你也可以说,“你应该用Emacs编辑代码。”:P