0 perl
我是Perl的新手,我需要编写一个程序,如果它们彼此相距一定距离,则会找到匹配的程序.所以我得到了一个哈希数组,其中包含每个级别的开始位置,结束位置和群集中存在的匹配数(开头为1).
如果我想知道两个匹配之间的距离是否正常,我会做Begin2-End1
my $DEBUG = 1;
my @hitsarray =();
my ($beginarray,$endarray,$aantalarray);
my $hit = { BEGIN => $beginarray, EIND => $endarray, MATCHES => $aantalarray, };
for (my $k = 0;$k <= $#beginarray;$k++)
{
print $beginarray[$k],"\t",$endarray[$k],"\t",$aantalarray[$k],"\n" if ($DEBUG);
$hit = ();
$hit->{BEGIN} = $beginarray[$k];
$hit->{END} = $endarray[$k];
$hit->{MATCHES} = $aantalarray[$k];
push (@hitsarray,$hit);
}
for ( my $m = 0; $m <= $#hitsarray; $m++)
{
while($hitsarray[$m+1]{BEGIN} - $hitsarray[$m]{END} < 5 && $hitsarray[$m+1]{BEGIN} - $hitsarray[$m]{END} > 3)
{
$hitsarray[$m]{END} = $hitsarray[$m+1]{EIND};
$hitsarray[$m]{MATCHES} +=1;
delete $hitsarray[$m+1];
print $beginarray[$m],"\t",$endarray[$m],"\t",$aantalarray[$m],"\n" if ($DEBUG);
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用!我的电脑进入一个循环,并在脚本第55行说明"在减法( - )中使用未初始化的值."
它可能必须使用引用做一些事情,但我真的不明白那些..我也尝试了一个更简单的结构,有两个非连接数组但我有同样的问题;
你如何使用不同行 (和不同数组)的 元素进行减法?
任何帮助都非常受欢迎!!
我知道这似乎不是最有帮助的,但是你的代码是错误的,没有一个问题或一个修正.以下是一些问题.
use warnings; use strict;脚本的顶部.$beginarray[$m],引用一个名为@beginarray的数组变量,该变量名称相同,但实际上是与$ beginarray不同的变量,它是一个标量.$hit = ();实际上只是设置了标量变量$命中为0,因为这是该数组的长度().delete $hitsarray[$m+1]将从数组中删除该值,但该索引将为空,其上方的项目将不会在数组中移动.要从数组中删除项目,您需要grep到新数组或拼接现有数组.您需要制作一个更小的示例或使用数组来弄清楚您做错了什么.