У меня есть хэш, который должен содержать определенные ключи, которые связаны с их собственными массивами. Чтобы быть более конкретным, хеш-ключи являются значениями качества, а массивы - именами последовательностей. Если для этого качества уже существует массив, я бы хотел добавить имя последовательности в массив, связанный с соответствующим качеством. Если его нет, я хочу создать его и добавить к нему имя последовательности. Все это делается в цикле while, проходя через все последовательности один за другим.Perl, хэш массивов: добавление и удаление ключей, добавление в массив, все в цикле while
Я пытался делать такие вещи, как в Perl How do I retrieve an array from a hash of arrays?, но я не могу понять, как это правильно.
Я просто получаю эти сообщения об ошибках: Скалярное значение @ {хэша {$ Q} лучше записать как $ {хэша {$ д} на asdasd.pl линии 69. Глобальный символ "@q" требует явного пакета имя Asdasd .pl line 58. И некоторые другие тоже.
Вот пример того, что я пробовал:
my %hash;
while (reading the sequences) {
my $q = "the value the sequence has";
my $seq = "the name of the sequence";
if (exists $hash{$q}) {
push (@{$hash{$q}}, $seq);
} else {
$hash{$q} = \@q;
$hash{$q} = [$seq];
next;
}
}
Это, очевидно, не должна быть очень сложной проблемой, но я новичок в PERL и такого рода проблемы чувствует себя трудно. Я искал это из разных мест, но, похоже, я чего-то не понимаю, и это может быть действительно очевидно.
массив '@ q' не определен. Пожалуйста, включите его в свой код. – shawnhcorey
Умм, да, это нигде не определено, что может вызвать проблемы.Я все еще смущен, как вы можете (а иногда и нужно) переключаться с ‰ или @ на $ в разных ситуациях, не определяя ничего, иногда я получаю ошибки, а иногда я должен это делать. Во всяком случае, я получил это, чтобы работать с подсказкой, что мне действительно нужно заявление «push». – Vamii
Пожалуйста, напишите рабочий код. В противном случае очень сложно ответить на ваши вопросы. – shawnhcorey