Я пытаюсь подсчитать, сколько раз DE10 и каждый из ключей в моем хеше ICD10 происходит в той же строке в моем файле2.tsv. Мне также нужно разделить его на мужчину/женщину (M/K). Поэтому я сделал хэш, получивший название. Каждый из ключей в этом назван в честь ключа в хеше ICD10, и они ссылаются на массив из двух элементов, первый подсчет самца, второй - подсчет самки.Проблемы с ссылками на массивы в perl
Но я получаю это предупреждение:
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);
}
}
Скобки в этих двух предложениях '$ results {$ key} = (1,0);' и '$ results {$ key} = (0,1);' должны быть скобками, если вы хотите '$ results {$ key} 'для ссылки на массив. –
Является ли эта строка опечаткой 'if (grep (m/^ DE10, keys% hash)) {'? Это должно быть 'if (grep (/^DE10 /, keys% hash)) { ' – Toto
M42: извините, это была ошибка копирования. – user2335015