Я самоучка Perl, ищу помощи у экспертов Perl:
Я продолжаю получать сообщение об ошибке, говорящее, что я не могу использовать дескриптор файла в цикле foreach, хотя я уверен, что это close (или undef, я пробовал оба). Полный текст ошибки см. здесь: http://cl.ly/image/2b2D1T403s14
Код доступен на GitHub: https://github.com/bsima/yeast-TRX.
Рассматриваемый код можно найти в файле «script.pl» примерно в строке 90:
foreach my $species (keys %Saccharomyces) {
open(RAW,">./data/$species/$geneName/raw.csv");
print RAW "gene,dinucleotide,position,trx.score,energy.score\n";
undef RAW;
open(SMOOTH,">./data/$species/$geneName/smooth.csv");
print SMOOTH "gene,position,trx.score,energy.score\n";
undef SMOOTH;
}
Помощь очень ценится! Я не знаю тонкостей того, как Perl работает с файловыми дескрипторами, вероятно, из-за отсутствия у меня формального обучения. Приветствуются любые комментарии по поводу общего качества моего кода, если кто-то чувствует себя особенно полезным.
РЕДАКТИРОВАТЬ: Нашел проблему. Perl не может генерировать каталоги на лету, поэтому каталог $species/$geneName никогда не создавался. Я добавил строку в начале цикла foreach, в которой говорилось просто mkdir("$species/$geneName");, и это решило проблему.
perldoc -f undefперечисляет виды вещей, на которых вы можете его использовать. Файловые дескрипторы Bareword не входят в этот список. Прислушайтесь к совету MVP и используйтеcloseи лексические файловые дескрипторы. - person tjd   schedule 11.10.2013