Arrays perl中数组引用的问题

Arrays perl中数组引用的问题,arrays,perl,reference,Arrays,Perl,Reference,我试图计算DE10和ICD10散列中的每个键在file2.tsv的同一行中出现的次数。我还要用男性/女性(M/K)来除以它。 因此,我制作了一个名为results的散列。其中的每个键都是以ICD10散列中的键命名的,它们指的是一个由2个元素组成的数组,第一个元素是男性,第二个元素是女性 但我得到这个警告: Can't use string ("0") as an ARRAY ref while "strict refs" 由于这一行: $results{$key}[1] +=1; 我在这

我试图计算DE10和ICD10散列中的每个键在file2.tsv的同一行中出现的次数。我还要用男性/女性(M/K)来除以它。 因此,我制作了一个名为results的散列。其中的每个键都是以ICD10散列中的键命名的,它们指的是一个由2个元素组成的数组,第一个元素是男性,第二个元素是女性

但我得到这个警告:

Can't use string ("0") as an ARRAY ref while "strict refs"
由于这一行:

  $results{$key}[1] +=1;
我在这个参考部分有点弱,有人能帮我纠正我的错误吗?非常感谢

#!/usr/bin/perl -w
use strict;

###################
# loading my hash #
###################

my %icd10;

open(IN, '<', 'myfile.tsv') or die;
while (defined (my $line = <IN>)) {
chomp $line;
$icd10{$line} = 1;
}
close IN;

################
### COUNTING
#################

my %results;

open(IN, '<', 'myfile2.tsv') or die;
while (defined (my $line = <IN>)) {
chomp $line;
my @line = split('\t', $line);
my %hash;
for (my $i = 2; $i < scalar(@line); $i++){ 
    $hash{$line[$i]} = 1;
}

if (grep (m/^DE10/, keys %hash)) {
    foreach my $key (keys %icd10){
        if (grep (m/^$key/, keys %hash)) {
            if (exists $results{$key}) {
                if ($line[1] eq 'M') {
                    $results{$key}[1] +=1;
                }
                elsif ($line[1] eq 'K'){
                    $results{$key}[2] +=1;
                }
            }
            else{
                if ($line[1] eq 'M') {
                    $results{$key}=(1,0);
                }
                elsif ($line[1] eq 'K'){
                    $results{$key}=(0,1);
                }
            }
#/usr/bin/perl-w
严格使用;
###################
#加载我的哈希#
###################
我的%icd10;

open(在“中)如果希望
$results{$key}
作为对数组的引用,那么这两个相同句子
$results{$key}=(1,0);
中的括号应该是方括号,如下所示:
$results{$key}=[1,0];

要创建对数组的引用,可以使用反斜杠运算符:

$arrayref = \@array;
要创建对匿名数组的引用,应使用方括号:

$arrayref = [ 'ele1', 'ele2' ];

有关更多详细信息,请参见。

这两句话中的括号
$results{$key}=(1,0);
$results{$key}=(0,1);
应该是括号,如果您希望
$results{$key}
作为数组的引用。这一行是键入类型
如果(grep(m/^DE10,keys%hash)){/code>?应该是
如果(grep)(/^DE10/,keys%hash)){
M42:对不起,那是一个复制粘贴错误。leeduhem:那么它应该是$results{$key}={1,0}?它不能解决问题,它应该是
$results{$key}=[1,0];
好的,我可能真的很愚蠢,但我不确定我应该改变什么。如果我写$results{$key}=[1,0]我还是有同样的问题。我不知道你说的是什么意思brackets@user2335015将
$results{$key}=(1,0);
更改为
$results{$key}=[1,0];
不起作用?对不起,在我的真实代码中,还有几个地方需要更改。它似乎正在运行。谢谢:)@user2335015已经将“方括号”更改为“方括号”,我希望这一个的含义是清楚的。