Perl中的校验和
我是一名java开发人员,我需要理解一些perl代码,并需要将其转换为java。下面是片段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
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