Perl:我可以使用索引同时访问两个不同级别的哈希数组吗?

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行说明"在减法( - )中使用未初始化的值."

它可能必须使用引用做一些事情,但我真的不明白那些..我也尝试了一个更简单的结构,有两个非连接数组但我有同样的问题;

你如何使用不同行 (和不同数组)的 元素进行减法?

任何帮助都非常受欢迎!!

tst*_*ter 6

我知道这似乎不是最有帮助的,但是你的代码是错误的,没有一个问题或一个修正.以下是一些问题.

  1. 放在use warnings; use strict;脚本的顶部.
  2. $ beginarray,$ endarray和$ aantalarray都是标量,而不是数组.您可能希望它们是对数组的引用,但它们不是因为您从未分配它们.注意:当你这样做时$beginarray[$m],引用一个名为@beginarray的数组变量,该变量名称相同,但实际上是与$ beginarray不同的变量,它是一个标量.
  3. 如果您在第55行遇到问题,则不会向我们展示所有内容
  4. 这一点,$hit = ();实际上只是设置了标量变量$命中为0,因为这是该数组的长度().
  5. $#beginarray将为-1,因为未声明@beginarray.即使您更改了代码以声明它,它仍然没有数据,因此第一次看起来不会运行.
  6. delete $hitsarray[$m+1]将从数组中删除该值,但该索引将为空,其上方的项目将不会在数组中移动.要从数组中删除项目,您需要grep到新数组或拼接现有数组.

您需要制作一个更小的示例或使用数组来弄清楚您做错了什么.