perl中数组引用的问题

时间:2014-01-18 10:01:02

标签: arrays perl reference

我正在尝试计算DE10和ICD10哈希中的每个键在我的file2.tsv中的同一行中出现的次数。我还需要按男/女(M / K)划分。 因此我做了一个叫做结果的哈希。其中的每个键都以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);
                }
            }

1 个答案:

答案 0 :(得分:2)

如果您希望$results{$key}成为对数组的引用,则这两个相同句子$results{$key}=(1,0);中的括号应为方括号,如下所示:$results{$key}=[1,0];

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

$arrayref = \@array;

要创建对匿名数组的引用,您应该使用方括号:

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

有关详细信息,请参阅perlref